在我的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
答案 0 :(得分:2)
您使用了一个条件(以?
开头的第一个组),语法错误,这就是您的警告。
但我认为你不需要有条件的正则表达式,试试
var_dump(preg_match("#^(?!(Bob|Alice)$).*#", 'John'));
我将Anchor ^
移动到表达式的最开头,并将$
移到了交替之外,因此它对两个替代方案都有效。
此正则表达式将匹配每个字符串(不带换行符),不仅是“Bob”或“Alice”。