【发布时间】:2011-10-24 07:13:33
【问题描述】:
我有这个正则表达式:
('.+')
它必须匹配 C 中的字符文字。例如,如果我有 'a' b 'a',它应该匹配 a 和它们周围的 '。
但是,它也与b 匹配(它不应该),可能是因为严格来说,它也在' 之间。
这是出错原因的屏幕截图(我用它来突出显示语法):
我对正则表达式相当陌生。我怎样才能告诉正则表达式不匹配这个?
【问题讨论】:
标签: regex
我有这个正则表达式:
('.+')
它必须匹配 C 中的字符文字。例如,如果我有 'a' b 'a',它应该匹配 a 和它们周围的 '。
但是,它也与b 匹配(它不应该),可能是因为严格来说,它也在' 之间。
这是出错原因的屏幕截图(我用它来突出显示语法):
我对正则表达式相当陌生。我怎样才能告诉正则表达式不匹配这个?
【问题讨论】:
标签: regex
它是贪婪的,匹配第一个撇号和最后一个撇号以及介于两者之间的所有内容。
这应该匹配任何不是撇号的东西。
('[^']+')
另一种选择是尝试非贪婪匹配。
('.+?')
【讨论】:
'\'',它是 C 中的字符文字(正如问题所述,它需要匹配它们)。`
('([^'\\]|\\.)*') 那么呢?它奏效了。
您是否尝试过非贪婪版本,例如('.+?')?
匹配(或两组量词)通常有两种模式,最大(贪婪)和最小(非贪婪)。第一个将导致可能的最长匹配,而后者将导致最短的匹配。您可以在Perl Cookbook(第 6.15 节)中了解它(尽管在 perl 上下文中)。
【讨论】:
试试:
('[^']+')
^ 表示包括除方括号中的字符之外的所有字符。这样,它不会匹配'a' b 'a',因为两者之间有一个',所以它会给出'a' 的两个实例
【讨论】:
^ 被用作锚点。它需要在括号内才能按预期工作。
你需要转义引号:
\'[^\']+\'
编辑:嗯,我想这个答案取决于您使用的语言/系统。