1

我需要编写一个 perl 正则表达式来转换

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,

提前致谢。

4

5 回答 5

4

在处理 url 时,使用诸如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
于 2013-02-08T12:45:47.797 回答
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
于 2013-02-08T12:42:03.700 回答
1

尝试这样做:

my $x = "site.company.com";
my @a = split /\./, $x;
map { s/^/dc=/; } @a;
print join",", @a;
于 2013-02-08T12:47:31.437 回答
0

就这样放

$data="site.company.com";
$data =~ s/,dc=$1/dc=$1/g; #(or) $data =~ s/,dc/dc/g;
print $data;
于 2013-02-08T12:56:52.693 回答
0

我要试试这/ge条路线:

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

e = 评估替换为 Perl 代码。

因此,它说给定字符串或点的开头,进行以下替换。如果它捕获了一个句点,则发出一个','. 不管这个结果如何,插入'dc='.

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

于 2013-02-08T15:13:36.510 回答