2008-11-12 71 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;