2

この質問はSOで何度も聞かれていることは知っていますが、これを機能させることができないようです。

正規表現を使用して任意のFacebookURLに一致するものを見つけようとしていますが、URLに「plugins / like」が含まれている場合はそうではありません(「http://www.facebook.com/plugins/like」のように)

私は次のことを思いついたが、なぜそれが機能しないのかよくわからない:

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

私は非常に明白な間違いを犯していますか?まったく意味がない場合は申し訳ありませんが、私は過去5か月間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

すべてがあなたのreで大丈夫です(そしてそれはうまくいきます;私はチェックしました)。私が変更するのは書くことだけです

(?!.*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 に答える