我在控制台中运行了您的代码,只需调整最后一个片段中的变量名称即可:
php > $resource = "THIS IS ABOUT WWW.JONAKCOMPUTERS.COM, HTTP://HIGHLOW.COM, AND TESTINGSERVER1.COM"
php > $pattern = '#(www\.|https?:\/\/){1}[a-zA-Z0-9]{2,}\.[a-zA-Z0-9]{2,}(\S*)#i';
php > preg_match_all($pattern, $resource, $matches, PREG_PATTERN_ORDER);
php > var_dump($matches);
array(3) {
[0]=>
array(2) {
[0]=>
string(23) "WWW.JONAKCOMPUTERS.COM,"
[1]=>
string(19) "HTTP://HIGHLOW.COM,"
}
[1]=>
array(2) {
[0]=>
string(4) "WWW."
[1]=>
string(7) "HTTP://"
}
[2]=>
array(2) {
[0]=>
string(1) ","
[1]=>
string(1) ","
}
}
您在 preg_match 返回中看到的是一个多维数组,其中包含以下内容:
0:完整比赛
1:子模式 1 匹配
2:子模式 2 匹配
我看到的唯一修复是您需要稍微调整 RegExp 以解决缺少 ww 或 http 的问题。所以只需使用它作为模式:
$pattern = '#(www\.|https?:\/\/)?[a-zA-Z0-9]{2,}\.[a-zA-Z0-9]{2,}(\S*)#i';
您的 $matches 现在应该包含所有 3 个。