我有一个我要清理的数据列表
abcd.efgh.igk.l.domain.com
abcd.efgh.igk.domain.net
abcd.efgh.domain.org
在每个实例中,我想保留domain.com,domain.net或domain.org
我无法确定正确的正则表达式。我试着这样做:
^.*\.com$|^.*\.net$|^.*\.org$
上述正则表达式不起作用。数据将完全随机可以是任意数量的字符,但随后将始终有domain.com,domain.net等。我想使用正则表达式,如域名以“.com”结尾并删除所有内容到左边IF有一个子域名/句号等。我希望这有道理,因为“域名”在每一行都会有所不同
答案 0 :(得分:0)
我会使用这个正则表达式:
$regex='(?P<domain>\\w+\\.org|\\.com|\\.net)$'
preg_match($regex, $str, $matches);
echo $matches['domain'];
此正则表达式搜索以.com
,.org
或.net
结尾的任何内容,并返回前缀字母数字字符(.
不是字母数字)
您可以阅读有关preg_match here
的更多信息答案 1 :(得分:0)
使用以下正则表达式,然后将匹配的字符替换为\1
^.*\.([^.]*\.(?:com|net|org))$
Perl代码:
use strict;
use warnings;
while(my $line = <DATA>) {
$line =~ s/^.*\.([^.]*\.(?:com|net|org))$/$1/g;
print $line;;
}
__DATA__
abcd.efgh.igk.l.domain.com
abcd.efgh.igk.domain.net
abcd.efgh.domain.org
sasas.asa.sas.as.as.ad.sdsa.da.12121.dsadad.21ddasdas.domain.com
domain.org
输出:
domain.com
domain.net
domain.org
domain.com
domain.org
答案 2 :(得分:0)
^.*\.(?=[^.\n]*\.[^\n.]*)
试试这个。empty string
。见。演示。
https://regex101.com/r/vD5iH9/9
或
^.*\\.(?=[^.\\n]*\\.[^\\n.]*)