Regex匹配后面跟有另一个单词的字符串

本文关键字:另一个 单词 字符串 Regex | 更新日期: 2023-09-27 17:57:50

所以我正在尝试编写一个正则表达式,它将匹配一个定义的字符串,然后最终匹配另一个单词。例如,在字符串SELECT * FROM persons ORDER BY name ASC LIMIT 10中,我希望匹配ORDER BY name ASC LIMIT。这看起来应该很简单,但我一直没能弄清楚。

从本质上讲,我不在乎ORDER BY和LIMIT之间是什么,但我希望在LIMIT处停止匹配。以下是我目前所拥有的:

string pattern = @"'s*ORDER's*BY.*LIMIT";

但它最终匹配了整个SELECT语句,我想在LIMIT处停止。

提前感谢!

Regex匹配后面跟有另一个单词的字符串

试试这个修改后的模式:

string pattern = @"'s*ORDER's*BY.+?LIMIT";

使用.*可能是罪魁祸首,因为它是一个贪婪的匹配。为了使其不贪婪,添加一个?,使其成为.*?。就我个人而言,如果我希望之后至少匹配一个字符,我更喜欢使用.+?。对于's*,您不想让它变得非贪婪,但可能希望使用's+来确保至少存在一个空白字符。事实上,您可能希望使用'b来匹配单词边界,而不是考虑空白,这会将模式更改为:

string pattern = @"'bORDER's+BY'b.+?'bLIMIT'b";

换句话说,匹配单词"ORDER"的开头,后跟至少一个空白字符,匹配"by"和单词边界(单词的末尾),然后至少匹配一次任何字符,不贪婪,直到找到完整的单词"LIMIT"。了解你的数据很重要,你可能会避开第一种模式。单词边界有助于避免部分匹配并确保完整的单词匹配。例如,请参阅此相关问题。

相关文章: