正则表达式:不包含

时间:2012-07-30 12:47:07

标签: php regex

我知道这个问题在SO上已被多次询问过,但我似乎无法让这个问题起作用。

我正在尝试使用正则表达式查找任何Facebook网址的匹配,但不是,当网址包含“插件/类似”时(如“http://www.facebook.com”) /插件/等“)

我已经提出以下内容,我不太清楚为什么它不起作用:

https?://(www)?\.facebook\.[a-zA-Z]{2,4}/((?!plugins/like).)

我犯了一个非常明显的错误吗?很抱歉,如果它没有任何意义,但我过去五个月只尝试过PHP。

非常感谢您的时间和帮助。

修改 到目前为止,我正在为任何FB URL获取匹配项,但它不会排除任何包含插件/类似

的内容

4 个答案:

答案 0 :(得分:2)

$urls = array(
    'http://www.facebook.com/',
    'https://facebook.com/plugins/foo',
    'http://facebook.ru/plugins/like',
);

$pattern = '#^https?://(www\.)?facebook\.[a-z]{2,4}/(?!plugins/like)#';

foreach ($urls as $url) {
    echo preg_match($pattern, $url) . PHP_EOL;
}

好?

答案 1 :(得分:1)

这是使用strpos()

的解决方案
$url = 'http://www.facebook.com/test/plugins/like?somestuff';

$matches = array();

if(preg_match('#^https?://(?:www)?\.facebook\.[a-zA-Z]{2,4}/(.*)$#', $url, $matches)
   && strpos($matches[1], "plugins/like") === false) {
  // ok
} else {
  // nope
}

答案 2 :(得分:0)

你忘了逃避模式中的特殊字符。字符如:和/必须遵循反斜杠。

https?\:\/\/(www)?\.facebook\.[a-zA-Z]{2,4}\/((?!plugins\/like).)

答案 3 :(得分:0)

一切都好(你的确有效;我已经检查过了)。我唯一要改变的是写

(?!.*plugins/like)

而不是(?!plugins/like).。这适用于plugins之后facebook.com/不直接的情况。