我有这个RegEx:
('.+')
它必须匹配像C中的字符文字。例如,如果我有'a' b 'a'
,它应该匹配a和'
周围的字符。
但是,它也匹配b
(它不应该),可能是因为它严格来说也是'
之间的。{/ p>
以下是它出错的截图(我将其用于语法高亮显示):
我对正则表达式很新。我怎么能告诉正则表达式不匹配呢?
答案 0 :(得分:10)
它是贪婪的,匹配第一个撇号和最后一个撇号和中间的一切。
这应该匹配任何不是撇号的东西。
('[^']+')
另一种选择是尝试非贪婪的比赛。
('.+?')
答案 1 :(得分:3)
您是否尝试过非贪婪版本,例如('.+?')
?
通常有两个匹配(或两组量词)的模式,最大(贪婪)和最小(非贪婪)。第一个将导致最长的匹配,后者最短。您可以在Perl Cookbook(第6.15节)中阅读它(尽管在perl上下文中)。
答案 2 :(得分:1)
尝试:
('[^']+')
^表示除了方括号中的字符外的每个字符。这样,它就不会与'a' b 'a'
匹配,因为它们之间有'
,所以相反它会同时给出'a'
的两个实例
答案 3 :(得分:-1)
你需要逃避qutoes:
\'[^\']+\'
编辑:嗯,我想我的答案取决于你使用的lang /系统。