如何创建正则表达式来捕获{this}文本并排除\ {that}?

时间:2010-09-27 01:34:36

标签: php regex preg-match

我需要一个正则表达式来捕获字符串中列出的字段名称。它们列在之间 以下是我的要求:

  1. 大括号中的字段名称
  2. 字段名称没有空格
  3. 花括号可以使用\
  4. 进行转义

    所以在下面:

    capture {this} text and exclude \{that}?
    

    匹配是{this}但不是{that}。

    我正在使用PHP和preg_match(我可以使用diff函数,我很开心)

    有什么想法吗? 我也在努力解释结果,所以我可能会学到一些东西:)

2 个答案:

答案 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

的内容