Regex для сопоставления поддоменов, отличных от "www" - PullRequest
1 голос
/ 25 ноября 2010

Привет, ребята.Прямо сейчас у меня есть это регулярное выражение в моем приложении PHP:

$regex = '#^(www\.)*([^www][a-z0-9-]+)\.tanlup\.local$#';

Вот что мне нужно сделать:

MATCH www.something.tanlup.local  
MATCH something.tanlup.local

NOT MATCH www.tanlup.local  
NOT MATCH tanlup.local

Проблема в том, что когда у меня есть поддомен, начинающийся с"W", это не соответствует!Кто-нибудь знает, почему и как я могу сделать это лучше?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 25 ноября 2010

Создание чрезмерно сложных регулярных выражений для одноразовых ситуаций, подобных этому, самоубийственно. Возможно, вам больше повезет, если вы создадите очень общее регулярное выражение и создадите черный список определенных доменов:

$regex = '/^([-\w]+.)+tanlup.local$/';
$disallowed = array ('www.tanlup.local', 'tanlup.local');

if (preg_match($regex, $str) && false === array_search($str, $disallowed) {
  // success
}
0 голосов
/ 25 ноября 2010

[^ www] не делает то, что вы думаете, что делает.Вы говорите, что вам не нужен символ "w".

0 голосов
/ 25 ноября 2010

Вам необходимо отрицательное утверждение за утверждением :

^.*(?<!^www)\.tanlup\.local$

Обратите внимание, что не все движки регулярных выражений поддерживают просмотр, но я верю, что PHP поддерживает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...