我想找出最好的regex
,只是简单地匹配网址中的最后两个字符串。
例如 www.stackoverflow.com 我只想匹配 stackoverflow.com
我遇到的问题是某些字符串可能有很多句点,例如
a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com
也应仅返回 yimg.com
我正在使用的URL集没有任何路径信息,因此我们可以假设字符串的最后一部分始终是.org
或.com
或那种性质的东西。
当针对www.stackoverflow.com运行时,常规表达将返回stackoverflow.com,并且当针对a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com运行时将返回yimg.com 在上述条件下?
答案 0 :(得分:3)
您不必使用正则表达式,而是可以使用简单的explode
函数。
因此,您希望在各个时段拆分您的网址,例如
$url = "a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com";
$url_split = explode(".",$url);
然后你需要得到最后两个元素,这样你就可以从创建的数组中回显它们。
//this will return the second to last element, yimg
echo $url_split[count($url_split)-2];
//this will echo the period
echo ".";
//this will return the last element, com
echo $url_split[count($url_split)-1];
所以最后你会得到yimg.com
作为最终输出。
希望这有帮助。
答案 1 :(得分:1)
如果你需要一个可以在多种语言中工作的Perl正则表达式兼容方式的解决方案,你可以使用类似的东西 - 例如在PHP中
$url = "a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com";
preg_match('|[a-zA-Z-0-9]+\.[a-zA-Z]{2,3}$|', $url, $m);
print($m[0]);
此正则表达式保证您获取url +域名的最后一部分。例如,使用a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com
生成
yimg.com
作为输出,并且使用www.stackoverflow.com
(有或没有前三个w)它会给你
stackoverflow.com
结果
答案 2 :(得分:1)
我不知道你到目前为止做了什么,但我可以提供以下解决方案:
/.*?([\w]+\.[\w]+)$/
这里有一些技巧:
使用$匹配直到字符串结尾。通过这种方式,您可以确保您的正则表达式引擎从一开始就无法捕捉到匹配。
在(...)内使用分组。实际上它意味着以下内容:匹配包含至少一个字母的单词然后应该有一个点(反斜杠,因为点在正则表达式中具有特殊含义,我们希望它'原样'然后再次出现一系列至少有一个字母的字母字母)。
在模式的开头使用不情愿的搜索,因为否则它将以贪婪的方式匹配所有内容,例如,如果您的文本是:
abc.def.gh
贪婪的比赛会给你的小组提供f.gh,而不是你想要的。
我认为你的主人只能有字母(\ w匹配这个单词,也许在你的例子中你需要更复杂的东西)。
我在这里发布一个工作的groovy示例,你没有指定你使用的语言,但引擎应该是相似的。
def s = "abc.def.gh"
def m = s =~/.*?([\w]+\.[\w]+)$/
println m[0][1] // outputs the first (and the only you have) group in groovy
希望这有帮助
答案 3 :(得分:0)
较短的版本
/(\.[^\.]+){2}$/