正则表达式删除字符串前的所有内容

时间:2015-01-30 08:15:29

标签: regex

我有一个我要清理的数据列表

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有一个子域名/句号等。我希望这有道理,因为“域名”在每一行都会有所不同

3 个答案:

答案 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))$

DEMO

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.]*)