Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式匹配除“www”以外的子域_Php_Regex_Url - Fatal编程技术网

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

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开头的子域时,它不匹配!有人知道我为什么和怎样才

嘿,伙计们。现在我的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开头的子域时,它不匹配!有人知道我为什么和怎样才能做得更好吗

谢谢

您需要一个:

请注意,并非所有正则表达式引擎都支持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的序列呢?