代码之家  ›  专栏  ›  技术社区  ›  Jason

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

  •  1
  • Jason  · 技术社区  · 14 年前

    以下是我的要求:

    1. 大括号中的字段名
    2. 字段名没有空格

    因此在以下方面:

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

    匹配项是{这个}而不是{那个}。

    我使用的是PHP和preg\u match(我可以使用diff函数,我愿意接受各种想法)

    你愿意为我解释一下结果吗?这样我就可以学到一些东西了:)

    2 回复  |  直到 14 年前
        1
  •  1
  •   zerkms    14 年前
    $s = 'capture {this} text and exclude \{that} {a} \{b} {c}?';
    preg_match_all('~(?<!\\\){[^}]+}~', $s, $matches);
    var_dump($matches);
    

    关于否定断言,您可以详细阅读 (?<! here

        2
  •  1
  •   SLaks    14 年前

    您可以使用“负面观察”: (?<!\\)\{[^}]+\} . (记住要避开 \ 对于PHP)

    表达式 (?<!something) 是一个零宽度断言,它只允许后续表达式匹配前面没有 something .
    因此,这个正则表达式匹配 \{[^}]+\} 除非前面没有 \\ 必须逃脱)