2013-02-08 104 views
1

中的一部分,我需要寫一個Perl的正則表達式轉換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, 

預先感謝。

+0

_「這上面的代碼輸出:dc = site,dc = company,dc = com,」_這正是你想要的,不是嗎? – Simon 2013-02-08 12:34:10

+0

「dc = site,dc = company,dc = com」 - 沒有結尾的',' – 2013-02-08 12:34:38

+0

哦,對不起,忽略了這一點。 – Simon 2013-02-08 12:34:55

回答

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 
+0

啊之後再添加一行。 +1代替多個。我的問題是理論上的,我希望通過一個正則表達式來實現這一點,而不使用sed樣式替換。 – 2013-02-08 12:50:55

+1

'$ data =〜s /\./,dc =/g && s/^/dc =/g;' - 第一個替換將應用於'$ data',而第二個替換將應用於'$ _'。 – TLP 2013-02-08 13:02:13

+0

但是最後的結果是什麼時候需要什麼呢?而@TLP我喜歡你的解決方案。 – Vijay 2013-02-08 13:38:06

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

試着這樣做:

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

只是把這樣的,

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

我打算去嘗試/ge路線:

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

e =評估替代爲Perl代碼。

因此,它表示給定字符串或點的開始,進行以下替換。如果它捕獲了一段時間,則發出一個','。無論如何,插入'dc='

請注意,我喜歡在我所評估的所有替代品上使用大括號分隔符。