正则表达式匹配“www”以外的子域名

时间:2010-11-25 15:23:38

标签: php regex url

嘿伙计们。现在我在我的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 个答案:

答案 0 :(得分:4)

为像这样的一次性情境构建过于复杂的正则表达式是弄巧成拙的。你可能有更好的运气建立一个非常通用的正则表达式和黑色列出某些域:

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

if (preg_match($regex, $str) && false === array_search($str, $disallowed) {
  // success
}

答案 1 :(得分:0)

您需要negative lookbehind assertion

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

请注意,并非所有正则表达式引擎都支持lookbehind,但我相信PHP会这样做。

答案 2 :(得分:0)

[^ www]没有按照你的想法去做。你说你不想要'w'字符。

相关问题