perl正则表达式只替换字符串的一部分

时间:2013-02-08 12:31:42

标签: regex perl

我需要写一个perl regex来转换

site.company.com => dc=site,dc=company,dc=com

不幸的是我无法使用下面附带的正则表达式删除尾随的“,”。我当然可以在下一个语句中删除尾随的“,”但是希望将其作为正则表达式的一部分进行处理。

$data="site.company.com";
$data =~ s/([^.]+)\.?/dc=$1,/g;
print $data;

以上代码打印:

dc=site,dc=company,dc=com,

提前致谢。

5 个答案:

答案 0 :(得分:4)

处理网址时,最好使用URI等模块。但是,我不认为它适用于这种情况。

我认为这个任务最容易用拆分和连接来解决:

my $url = "site.company.com";
my $string = join ",",            # join the parts with comma
             map "dc=$_",         # add the dc= to each part
             split /\./, $url;    # split into parts

答案 1 :(得分:2)

$data =~s/\./,dc=/g&&s/^/dc=/g;

测试如下:

> echo "site.company.com" | perl -pe 's/\./,dc=/g&&s/^/dc=/g'
dc=site,dc=company,dc=com

答案 2 :(得分:1)

尝试这样做:

my $x = "site.company.com";
my @a = split /\./, $x;
map { s/^/dc=/; } @a;
print join",", @a;

答案 3 :(得分:0)

就像这样,

$data="site.company.com";
$data =~ s/,dc=$1/dc=$1/g; #(or) $data =~ s/,dc/dc/g;
print $data;

答案 4 :(得分:0)

我要尝试/ge路线:

$data =~ s{^|(\.)}{
    ( $1 && ',' ) . 'dc='
}ge;

e =将替换评估为Perl代码。

所以,它说如果字符串的开头或点,请进行以下替换。如果它捕获了一段时间,则发出','。无论此结果如何,请插入'dc='

请注意,我喜欢在所有已评估的替换项上使用大括号样式的分隔符。