$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”开头的子域名时,它不匹配!有谁知道为什么以及如何让它变得更好?
谢谢!
答案 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'字符。