PCRE正则匹配未被奇数个指定字符转义的目标字符
解决PCRE匹配未被转义字符的问题
要匹配未被转义的字符a(转义字符为#),同时处理转义字符被转义的场景(即偶数个#后接a需匹配,奇数个则不匹配),可以使用以下PCRE正则表达式:
(?<!(?:##)*#)a
正则工作原理
(?:##)*:匹配0次或多次连续的两个#,对应偶数个转义字符的情况(?:##)*#:整体匹配奇数个连续的转义字符(?<!...):负向零宽断言,确保目标字符a的前面不是奇数个#- 最终效果:仅当
a前的#数量为0(无转义)或偶数(转义字符被转义)时,才会匹配a
示例验证
bar:a前无#,匹配a✅b#ar:a前有1个#(奇数),不匹配 ✅b##ar:a前有2个#(偶数),匹配a✅b###ar:a前有3个#(奇数),不匹配 ✅
实际场景适配
若你的真实需求是匹配未被奇数个\转义的{,只需将正则中的#替换为转义后的\即可,对应的正则为:
(?<!(?:\\{2})*\\){
内容的提问来源于stack exchange,提问作者fpierrat
相关产品推荐
相关产品推荐

