我的正则表达式匹配得太多了。我怎么能告诉它匹配最小的模式?

时间:2011-08-10 17:09:40

标签: regex

我有这个RegEx:

('.+')

它必须匹配像C中的字符文字。例如,如果我有'a' b 'a',它应该匹配a和'周围的字符。

但是,它也匹配b(它不应该),可能是因为它严格来说也是'之间的。{/ p>

以下是它出错的截图(我将其用于语法高亮显示):
screenshot

我对正则表达式很新。我怎么能告诉正则表达式不匹配呢?

4 个答案:

答案 0 :(得分:10)

它是贪婪的,匹配第一个撇号和最后一个撇号和中间的一切。

这应该匹配任何不是撇号的东西。

('[^']+')

另一种选择是尝试非贪婪的比赛。

('.+?')

答案 1 :(得分:3)

您是否尝试过非贪婪版本,例如('.+?')

通常有两个匹配(或两组量词)的模式,最大(贪婪)和最小(非贪婪)。第一个将导致最长的匹配,后者最短。您可以在Perl Cookbook(第6.15节)中阅读它(尽管在perl上下文中)。

答案 2 :(得分:1)

尝试:

('[^']+')

^表示除了方括号中的字符外的每个字符。这样,它就不会与'a' b 'a'匹配,因为它们之间有',所以相反它会同时给出'a'的两个实例

答案 3 :(得分:-1)

你需要逃避qutoes:

\'[^\']+\'

编辑:嗯,我想我的答案取决于你使用的lang /系统。