我知道这个问题在SO上已被多次询问过,但我似乎无法让这个问题起作用。
我正在尝试使用正则表达式查找任何Facebook网址的匹配,但不是,当网址包含“插件/类似”时(如“http://www.facebook.com”) /插件/等“)
我已经提出以下内容,我不太清楚为什么它不起作用:
https?://(www)?\.facebook\.[a-zA-Z]{2,4}/((?!plugins/like).)
我犯了一个非常明显的错误吗?很抱歉,如果它没有任何意义,但我过去五个月只尝试过PHP。
非常感谢您的时间和帮助。
修改 到目前为止,我正在为任何FB URL获取匹配项,但它不会排除任何包含插件/类似
的内容答案 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/
不直接的情况。