This question already has answers here:
Regex: match everything but specific pattern

(7个答案)


2年前关闭。




是否可以在仍然返回true的情况下对不应该匹配的内容执行preg_match

例如,目前我们有...
if (preg_match('#^Mozilla(.*)#', $agent)) {

我们要检查Mozilla字符串是否不在$ agent中,但preg_match是否仍返回true。

所以我们不能将其更改为...
if (!preg_match('#^Mozilla(.*)#', $agent)) {

谢谢

最佳答案

您需要的是negative lookahead,语法为:

if (preg_match('#^(?!Mozilla).#', $agent)) {
实际上,您可能只需要使用#^(?!Mozilla)#就可以了。我不知道PHP对零宽度 token (但为I've tested it in JavaScript and it works fine)仅是一个模式的感觉如何。

编辑:
如果要确保Mozilla在字符串中的任何位置都没有出现,则可以使用此...
if (preg_match('#^((?!Mozilla).)*$#', $agent)) {
...但前提是您不能使用此功能!
if (strpos($agent, 'Mozilla') !== false) {

关于php - 如果不是,则进行预匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6254239/

10-16 13:29