1

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

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

我需要的正则表达式是 and 以外的所有^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

4

1 回答 1

2

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

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

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

我将 Anchor^移到了表达式的最开始和$交替之外,因此它对两种选择都有效。

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

于 2013-01-30T08:19:11.523 回答