正则表达式匹配可能转义的报价

时间:2013-03-04 21:54:13

标签: php regex escaping

我正在尝试编写一个匹配单引号的正则表达式,可以对其进行转义。匹配的引号应该在它之前有一个偶数个反斜杠(奇数表示报价被转义)。例如,在这五个字符串中:

'quotes should be matched'
\'quotes should NOT be matched\'
\\'quotes should be matched\\'
\\\'quotes should NOT be matched\\\'
\\\\'quotes should be matched\\\\'

这是我的正则表达式:

(?<=[^\\](?:\\\\)*)'

但是,这与上例中的任何内容都不匹配。我发现这很奇怪,因为从正则表达式中删除*会匹配带有两个反斜杠的引号,因为它应该:

(?<=[^\\](?:\\\\))'匹配\\'

1 个答案:

答案 0 :(得分:3)

据我所知,仅仅匹配'是不可能的。这是因为你不能像Wiseguy指出的那样拥有动态长度的外观。

以下正则表达式会匹配正确的'和任何导致它的\。不确定这是否有用..

(?<!\\)(?:\\\\)*'

匹配任意数量的双\,前面没有\,后跟'