Php 正则表达式匹配除“www”以外的子域
嘿,伙计们。现在我的PHP应用程序上有一个正则表达式:Php 正则表达式匹配除“www”以外的子域,php,regex,url,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开头的子域时,它不匹配!有人知道我为什么和怎样才
$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开头的子域时,它不匹配!有人知道我为什么和怎样才能做得更好吗
谢谢 您需要一个:
请注意,并非所有正则表达式引擎都支持lookbehind,但我相信PHP支持
请注意,并不是所有的正则表达式引擎都支持lookbehind,但我相信PHP是支持的。[^www]并不像您想象的那样。你是说你不想要一个“w”字 [^www]不会做你认为它会做的事。你是说你不想要一个“w”字 为像这样的一次性情况构建过于复杂的正则表达式会弄巧成拙。您可能会更幸运地构建一个非常通用的正则表达式,并将某些域列入黑名单:
$regex = '/^([-\w]+.)+tanlup.local$/';
$disallowed = array ('www.tanlup.local', 'tanlup.local');
if (preg_match($regex, $str) && false === array_search($str, $disallowed) {
// success
}
为像这样的一次性情况构建过于复杂的正则表达式会弄巧成拙。您可能会更幸运地构建一个非常通用的正则表达式,并将某些域列入黑名单:
$regex = '/^([-\w]+.)+tanlup.local$/';
$disallowed = array ('www.tanlup.local', 'tanlup.local');
if (preg_match($regex, $str) && false === array_search($str, $disallowed) {
// success
}
这对not-www.tanlup.local不起作用。这对not-www.tanlup.local不起作用。你忘了说为什么它不起作用。[]引入了字符列表,而不是普通括号中的字符序列。我怎么说我不想要三个w的序列呢?你忘了说为什么这不能做到这一点。[]引入了字符列表,而不是普通括号中的字符序列。我怎么说我不想要三个w的序列呢?