我使用下面的正则表达式仅匹配给定的字符序列,如果它没有被引号括起来 - 也就是说,如果它后跟偶数引号(使用正向前瞻)直到字符串结束。
假设我只想在引号之间不时匹配单词section
:
\bsection\b(?=[^"]*(?:"[^"]*"[^"]*)*$)
如何将此扩展以考虑转义引号?也就是说,如果我在链接示例中的引号之间插入\"
,则结果保持不变。
答案 0 :(得分:2)
使用pcre可以skip引用的内容:
(?s)".*?(?<!\\)"(*SKIP)(*F)|\bsection\b
在字符串正则表达式中,必须对反斜杠进行三重转义,例如\\\\
以匹配lookbehind中的文字反斜杠。或者在单个引用模式中,双重转义就足以满足这种情况。
$pattern = '/".*?(?<!\\\)"(*SKIP)(*F)|\bsection\b/s';
请参阅test at regex101。