Ian*_*las 1 .net c# regex string
所以我试着写一个正则表达式,它将匹配一个定义的字符串,然后最终另一个单词.例如,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";
Run Code Online (Sandbox Code Playgroud)
但它最终匹配整个SELECT语句,我想停在LIMIT.
提前致谢!
请尝试修改此模式:
string pattern = @"\s*ORDER\s*BY.+?LIMIT";
Run Code Online (Sandbox Code Playgroud)
使用.*是可能的罪魁祸首,因为这是一场贪婪的比赛.为了使它非贪婪添加一个?,使其成为现实.*?.我个人更喜欢使用,.+?如果我希望之后至少有一个角色匹配.因为\s*你不想让它变得非贪婪,但可能希望\s+用来确保至少存在一个空白字符.实际上,您可能希望使用\b匹配单词边界,而不是根据空白进行思考,这会将模式更改为:
string pattern = @"\bORDER\s+BY\b.+?\bLIMIT\b";
Run Code Online (Sandbox Code Playgroud)
换句话说,匹配单词"ORDER"的开头,后跟至少一个空白字符,匹配"BY"和单词边界(单词的结尾),然后匹配任何字符至少一次,非贪婪,直到找到完整的单词"LIMIT".了解您的数据非常重要,您可以使用第一种模式.字边界有助于避免部分匹配并确保完整的单词匹配.例如,请参阅此相关问题.
| 归档时间: |
|
| 查看次数: |
4904 次 |
| 最近记录: |