仅在引号之间匹配给定序列,并考虑转义引号

时间:2015-06-13 21:25:57

标签: php regex pcre

我使用下面的正则表达式仅匹配给定的字符序列,如果它没有被引号括起来 - 也就是说,如果它后跟偶数引号(使用正向前瞻)直到字符串结束。

假设我只想在引号之间时匹配单词section

\bsection\b(?=[^"]*(?:"[^"]*"[^"]*)*$)

Working example on RegExr

如何将此扩展以考虑转义引号?也就是说,如果我在链接示例中的引号之间插入\",则结果保持不变。

1 个答案:

答案 0 :(得分:2)

使用pcre可以skip引用的内容:

(?s)".*?(?<!\\)"(*SKIP)(*F)|\bsection\b

在字符串正则表达式中,必须对反斜杠进行三重转义,例如\\\\以匹配lookbehind中的文字反斜杠。或者在单个引用模式中,双重转义就足以满足这种情况。

$pattern = '/".*?(?<!\\\)"(*SKIP)(*F)|\bsection\b/s';

请参阅test at regex101