如果没有,则匹配

时间:2011-06-06 15:20:56

标签: php regex preg-match

是否有可能对某些不匹配的内容进行preg_match,同时仍然返回true?

例如我们现在......

if (preg_match('#^Mozilla(.*)#', $agent)) {

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

因此我们无法将其更改为...

if (!preg_match('#^Mozilla(.*)#', $agent)) {

由于

3 个答案:

答案 0 :(得分:12)

你想要的是negative lookahead,语法是:

if (preg_match('#^(?!Mozilla).#', $agent)) {

实际上,你可能只需#^(?!Mozilla)#即可。我不知道PHP对于一个只有零宽度标记的模式会有什么感觉,但是I've tested it in JavaScript and it works fine


编辑:

如果你想确保Mozilla在字符串中没有出现 ,你可以使用这个...

if (preg_match('#^((?!Mozilla).)*$#', $agent)) {

...但只有你不能使用它!

if (strpos($agent, 'Mozilla') !== false) {

答案 1 :(得分:2)

if (preg_match('#^Mozilla(.*)#', $agent) === 0) {

我希望我没有误解你的问题。 preg_match将返回0(未找到),1(找到1匹配,不搜索更多)或错误(发生某些问题)。当===返回false时,我使用preg_match不返回true。

答案 2 :(得分:2)

你可以使用这样的负向前瞻:

#^(?!Mozilla)(.*)#