正则表达式基础 - [^。]

时间:2014-04-18 21:29:22

标签: php regex

我正在尝试理解以下正则表达式,该表达式从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的形式出现?

我被困在模式[^。]。 ^表示免费和。意味着任何炭。所以 [^。]是什么意思?免费提供任何炭?请帮忙

3 个答案:

答案 0 :(得分:2)

你明白错了。当点(。)位于括号内时,它表示DOT,而不是任何字符。所以,[^。]表示每个不是点的字符。

答案 1 :(得分:1)

在字符类([])中,一个点意味着:一个文字点.

所以[^.]表示除点/句点之外的任何字符。

答案 2 :(得分:1)

如果你不熟悉它可能会很棘手。

.通常表示任何非空格字符。然而,在范围([])中,它恢复到字面意义,即句号(句号,如果你是美国人)。

^通常表示“锚定到字符串的开头”。但是,在一个范围内,当它是该范围内的第一个字符时,它会翻转逻辑,因此它代表允许的字符,而不是代表允许字符的范围。

所以模式'/[^.]+\.[^.]+$/'说:

  1. 匹配一个或多个不是句点的非空格字符(主机)的序列
  2. 此后匹配一段时间
  3. 匹配一个或多个非句点的非空格字符的另一个序列 (后缀)
  4. $将此锚定到字符串的末尾,因此步骤1-3必须按顺序直到字符串的最后一个字符。
  5. 顺便说一句,它并不完全是主机名匹配的防水模式。它没有考虑具有多个时期的子域或具有国家特定的域(例如“.co.uk”),而是指出两点。

相关问题