Catch-all正则表达式

时间:2013-01-30 07:48:18

标签: php regex preg-match catch-all

在我的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

1 个答案:

答案 0 :(得分:2)

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

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

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

我将Anchor ^移动到表达式的最开头,并将$移到了交替之外,因此它对两个替代方案都有效。

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

相关问题