我正在尝试理解以下正则表达式,该表达式从URL中获取域名
$ host =" www.php.net"
// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
$ match [0]如何以php.net的形式出现?
我被困在模式[^。]。 ^表示免费和。意味着任何炭。所以 [^。]是什么意思?免费提供任何炭?请帮忙
答案 0 :(得分:2)
你明白错了。当点(。)位于括号内时,它表示DOT,而不是任何字符。所以,[^。]表示每个不是点的字符。
答案 1 :(得分:1)
在字符类([]
)中,一个点意味着:一个文字点.
。
所以[^.]
表示除点/句点之外的任何字符。
答案 2 :(得分:1)
如果你不熟悉它可能会很棘手。
.
通常表示任何非空格字符。然而,在范围([]
)中,它恢复到字面意义,即句号(句号,如果你是美国人)。
^
通常表示“锚定到字符串的开头”。但是,在一个范围内,当它是该范围内的第一个字符时,它会翻转逻辑,因此它代表允许的字符,而不是代表允许字符的范围。
所以模式'/[^.]+\.[^.]+$/'
说:
$
将此锚定到字符串的末尾,因此步骤1-3必须按顺序直到字符串的最后一个字符。顺便说一句,它并不完全是主机名匹配的防水模式。它没有考虑具有多个时期的子域或具有国家特定的域(例如“.co.uk”),而是指出两点。