我需要写一个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,
提前致谢。
答案 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='
。
请注意,我喜欢在所有已评估的替换项上使用大括号样式的分隔符。