如果没有,则匹配

fir*_*ire 7 php regex preg-match

是否有可能做一个preg_match不应该匹配的东西,同时仍然返回真实?

例如,目前我们有......

if (preg_match('#^Mozilla(.*)#', $agent)) {
Run Code Online (Sandbox Code Playgroud)

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

所以我们不能把它改成......

if (!preg_match('#^Mozilla(.*)#', $agent)) {
Run Code Online (Sandbox Code Playgroud)

谢谢

Jus*_*gan 12

你想要的是一个负面的先行,语法是:

if (preg_match('#^(?!Mozilla).#', $agent)) {
Run Code Online (Sandbox Code Playgroud)

实际上,你可能只是#^(?!Mozilla)#因为这个而逃脱.我不知道PHP会如何看待一个只有零宽度令牌的模式,但我已经在JavaScript中测试过它并且工作正常.


编辑:

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

if (preg_match('#^((?!Mozilla).)*$#', $agent)) {
Run Code Online (Sandbox Code Playgroud)

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

if (strpos($agent, 'Mozilla') !== false) {
Run Code Online (Sandbox Code Playgroud)