我需要一个正则表达式来捕获字符串中列出的字段名称。它们列在之间 以下是我的要求:
所以在下面:
capture {this} text and exclude \{that}?
匹配是{this}但不是{that}。
我正在使用PHP和preg_match(我可以使用diff函数,我很开心)
有什么想法吗? 我也在努力解释结果,所以我可能会学到一些东西:)
答案 0 :(得分:1)
您可以使用负面的lookbehind:(?<!\\)\{[^}]+\}
。 (记得逃避PHP的\
)
表达式(?<!something)
是一个零宽度断言,只允许后续表达式匹配前面没有something
的文本。
因此,只有\{[^}]+\}
前面没有\\
时,此正则表达式才匹配\
。 ({{1}}必须转义)
答案 1 :(得分:1)
$s = 'capture {this} text and exclude \{that} {a} \{b} {c}?';
preg_match_all('~(?<!\\\){[^}]+}~', $s, $matches);
var_dump($matches);
详细信息,您可以阅读有关否定断言(?<!
here