PHP Regex非捕获组无法正常工作

时间:2013-11-08 21:14:03

标签: php regex

我正在尝试使用以下regexp从http_host获取域和tld:

(?:^|\.)(.+?\.(?:it|com))

正则表达式在gskinner.com中正常运行。

输入:

domain.com
www.domain.com

两者中的捕获组:

domain.com

然而在php中有以下内容:

preg_match("/(?:^|\.)(.+?\.(?:it|com))/", "www.domain.com", $matches);
print_r($matches);

输出:

Array
(
    [0] => www.baloodealer.com
    [1] => www.baloodealer.com
)

这有什么问题?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

preg_match("/[^.]+\.(?:it|com)$/", "www.domain.com", $matches);
print_r($matches);

/* output
Array
(
    [0] => domain.com
)
*/

答案 1 :(得分:0)

我认为你想要域的最后两部分?在TLD之前,不要只匹配任何字符:

"/(?:^|\.)([^\.]+?\.(?:it|com))$/"

(编辑:锚定到字符串的末尾,修复注释中指出的bug。)