Регулярное выражение PHP для соответствия любому URL, кроме тех, что на Example.com - PullRequest
0 голосов
/ 01 марта 2010

Приведите пример для псевдо-регулярного выражения: сопоставьте все URL-адреса, кроме URL-адресов example.com и example2.com, в соответствии с синтаксисом регулярных выражений PHP.

Вот то, что у меня есть, но это не такт работа:

$patternToMatch = "@https?://[^(example.com|example2.com)]\"*@i";

Ответы [ 4 ]

2 голосов
/ 01 марта 2010

Не используйте регулярные выражения для вещей, которые вам не нужны.

$parts = parse_url($url);
if ($parts && $parts['host'] != 'example.com' && $parts['host'] != 'example2.com') {
    // the URL seems OK
}
1 голос
/ 01 марта 2010

Нет, все в квадратных скобках будет соответствовать только одному символу. Например, регулярное выражение:

[^example]

будет соответствовать любому одному символу, кроме e, x, a, m, p, l и e.

Попробуйте отрицательный Lookahead :

@https?://(www\.)?(?!example2?.com)@i
1 голос
/ 01 марта 2010

Проблема здесь в том, что в определении класса ([]) специальные символы, такие как ( и | теряют свое значение.

Лучшее решение - найти соответствие на example.com или example2.com, а затем действовать только для отрицательных тестов.

0 голосов
/ 02 марта 2010

У вас почти был ответ. Это сделает соответствие, которое вы хотите.

$patternToMatch = "@https?://(example.com|example2.com)@i";
...