如何使用s ///运算符将字符插入字符串?

时间:2008-11-12 17:45:36

标签: regex perl string

我正在尝试将注释字符插入到与此类似的字符串中:

-CreateVideoTracker VT1 "vt name"

变为

-CreateVideoTracker VT1 # "vt name"

VT1字实际上可以是任何东西,所以我正在使用正则表达式

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

给了我结果:

-CreateVideoTracker w #T1 "vt name"

有没有办法用一个正则表达式做到这一点,还是我需要拆分字符串并手动插入注释?

4 个答案:

答案 0 :(得分:9)

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

正则表达式前半部分中括号内的表达式(称为“捕获缓冲区”)引用为$1$2。等等。下半场。

答案 1 :(得分:2)

您可以使用Perl 5.10正则表达式的\K功能;

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

答案 2 :(得分:0)

你有两个问题:

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

首先,你想匹配多个字符的单词,所以在左边,\ w应该是\ w +。 其次,你不能在右侧使用像\ w这样的模式;而是使用()在左边捕获你想要的东西,然后用$ 1,$ 2等把它放在右边:

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

答案 3 :(得分:-1)

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

替换为“#”