2

我知道这个问题已经在 SO 上被问过很多次,但我似乎无法让它发挥作用。

我正在尝试使用正则表达式来查找任何 Facebook URL 的匹配项,但不是当 URL 包含“plugins/like”时(如“http://www.facebook.com/plugins/like”)

我提出了以下内容,但我不太确定它为什么不起作用:

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

我犯了一个非常明显的错误吗?对不起,如果它根本没有意义,但在过去的五个月里我只尝试过 PHP。

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

编辑: 到目前为止,我得到了任何 FB URL 的匹配项,但它不排除任何包含插件/类似的东西

4

4 回答 4

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;
}

好的?

于 2012-07-30T13:00:19.327 回答
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
}
于 2012-07-30T13:06:52.787 回答
0

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

(?!.*plugins/like)

而不是(?!plugins/like).. 那是针对plugins不直接在facebook.com/.

于 2012-07-30T13:06:23.410 回答
0

您忘记转义模式中的特殊字符。像 : 和 / 这样的字符必须跟在反斜杠之后。

https?\:\/\/(www)?\.facebook\.[a-zA-Z]{2,4}\/((?!plugins\/like).)
于 2012-07-30T12:52:07.130 回答