PHP正则表达式不是以...负面看起来不起作用?

时间:2011-08-12 17:22:55

标签: php regex lookaround

我正在尝试提取名称服务器。 $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 个答案:

答案 0 :(得分:3)

你需要前瞻,而不是向后看:

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

但是,这可能还不够,因为它会继续匹配字符串abc.def.com中的www.abc.def.com。你还需要一些锚点和一个lookbehind(你不需要一些括号,反斜杠和i修饰符):

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