【问题标题】:Catch-all Regular expression包罗万象的正则表达式
【发布时间】:2013-01-13 23:19:25
【问题描述】:

在我的 PHP 程序中,我有一些只在运行时定义的正则表达式。 我如何编写一个正则表达式来匹配那些匹配项无法捕获的所有其他内容?

var_dump(preg_match("#^Bob$#", 'Bob'));
var_dump(preg_match("#^Alice$#", 'Alice'));

我需要的正则表达式是 ^Bob$^Alice$ 以外的所有内容。

我尝试过使用

var_dump(preg_match("#(?(?=(^Bob$|^Alice$))|^$|.*)#", 'John'));

但是 preg_match 函数给了我Warning: preg_match(): Compilation failed: conditional group contains more than two branches at offset 27

【问题讨论】:

    标签: php regex preg-match catch-all


    【解决方案1】:

    您使用了语法错误的条件(第一组以? 开头),这是您的警告。

    但我认为你不需要条件正则表达式,试试

     var_dump(preg_match("#^(?!(Bob|Alice)$).*#", 'John'));
    

    我将锚点 ^ 移动到表达式的开头,将 $ 移动到替换之外,因此它对两种替换都有效。

    此正则表达式将匹配每个字符串(不包括换行符),不仅是“Bob”或“Alice”。

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2018-12-09
      • 2019-11-23
      • 2016-06-11
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      相关资源
      最近更新 更多