是否有可能对某些不匹配的内容进行preg_match
,同时仍然返回true?
例如我们现在......
if (preg_match('#^Mozilla(.*)#', $agent)) {
我们要检查Mozilla字符串是否不在$ agent中,但仍然preg_match
返回true。
因此我们无法将其更改为...
if (!preg_match('#^Mozilla(.*)#', $agent)) {
由于
答案 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)(.*)#