Регулярное выражение PHP НЕ начинается с .. негативный взгляд не работает? - PullRequest
0 голосов
/ 12 августа 2011

Я пытаюсь извлечь сервер имен.Формат $output таков, что он содержит, например, ns1.nameserver.com.

Может также содержать www.apple.com.
Конечно, это не сервер имен.

Япоэтому я стараюсь не включать никаких результатов, которые содержат www.
Моя попытка приведена ниже:

$regexp = "/(?<!www)([A-Za-z0-9-]+[\.][A-Za-z0-9-]+[\.][A-Za-z0-9-\.]+)/i";
preg_match_all($regexp, $output, $nameservers);

1 Ответ

3 голосов
/ 12 августа 2011

Вам нужно смотреть вперед, а не смотреть назад:

/(?!www)([A-Za-z0-9-]+[\.][A-Za-z0-9-]+[\.][A-Za-z0-9-\.]+)/i

Однако этого, вероятно, недостаточно, потому что затем он будет соответствовать abc.def.com в строке www.abc.def.com. Вам также понадобятся несколько якорей и вид сзади (и вам не нужны скобки, обратная косая черта или модификатор i):

/(?<!\.)(?!www)\b([A-Za-z0-9-]+\.[A-Za-z0-9-]+\.[A-Za-z0-9.-]+)/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...