2008-11-12 68 views
2

我想插入註釋字符到類似這樣的字符串的東西:如何使用s ///運算符將字符插入到字符串中?

-CreateVideoTracker VT1 "vt name" 

成爲

-CreateVideoTracker VT1 # "vt name" 

的VT1字其實可以是任何東西,所以我用正則表達式

$line =~ s/\-CreateVideoTracker \w/\-CreateVideoTracker \w # /g; 

這給我結果:

-CreateVideoTracker w #T1 "vt name" 

有沒有辦法用一個正則表達式來做到這一點,還是我需要拆分字符串並手動插入註釋?

回答

9
$line =~ s/^(\-CreateVideoTracker)\s+(\w+)/$1 $2 #/; 

方括號內的表達式(稱爲「捕獲緩衝器」)在正規表達式的前半部分作爲$1$2引用。等在下半場。

0
(?<=-CreateVideoTracker\s[^\s]*)(?<replacemelolkthx>\s) 

用 「#」 代替

+0

廢話,語言錯誤 – Will 2008-11-12 18:00:20

+0

沒關係,我沒有指定,它必須是Perl的 – bsruth 2008-11-12 20:00:12

2

你可以使用Perl 5.10 regexs的\K功能;

$line=~s/^\-CreateVideoTracker\s+\w+\K/ #/; 
0

你有兩個問題:

$line =~ s/\-CreateVideoTracker \w/\-CreateVideoTracker \w # /g; 

首先,你要匹配多個字符的話,那麼在左側,\ W應該是\ w +。 其次,您不能在右側使用像\ w這樣的圖案;而不是捕捉你想在左邊有(什麼),並把它放在右側以$ 1,$ 2,等:

$line =~ s/\-CreateVideoTracker (\w+)/\-CreateVideoTracker $1 # /g;