PHP 正则表达式非捕获组不起作用


PHP Regexp Non capturing group not working

我正在尝试使用以下正则表达式从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
)

这是怎么回事?

你可以这样做:

preg_match("/[^.]+'.(?:it|com)$/", "www.domain.com", $matches);
print_r($matches);
/* output
Array
(
    [0] => domain.com
)
*/

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

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

(编辑:锚定到字符串的末尾,以修复评论中指出的错误。