我要替换的行:
1.my_type NEW{ 2} my type
2.my_type TEST{ 0} my type
我的预期输出:
1. my_type NEW{ 0x02} my type
2. my_type TEST{ 0x00} my type
我想将NEW{2}
替换为NEW{0x02}
,将NEW{0}
替换为NEW{0x00}
表示它在文件中匹配的所有匹配项
my_code:
while (<DATA>)
{
if (/NEW\s+[{2}]\d+/)
{
s/NEW{ 2}/NEW{ 0x02}/ ;
}
elsif (/NEW\s+[{0}]\d+/)
{
s/NEW{ 0}/NEW{ 0x00}/ ;
}
}
为什么更换没有发生..?
答案 0 :(得分:1)
没有理由使用多个替换,你可以用一个替换。试试这个
s/NEW *\{ *([02])* \}/NEW{ 0x0$1}/;
你不需要条件。所以这样的事情应该这样做:
#!/usr/bin/perl
use strict;
use warnings;
while (<DATA>) {
s/NEW *\{ *([02]) *\}/NEW{ 0x0$1}/;
# do something with $_ here, e.g.:
print $_;
}
__DATA__
1.my_type NEW{ 2} my type
2.my_type NEW{ 0} my type
基本上,替换运算符会为您处理条件。只有当正则表达式匹配时,它才会执行替换。
答案 1 :(得分:0)
您的输入
1.my_type NEW{ 2} my type
2.my_type NEW{ 0} my type
与您的测试不匹配
if (/NEW\s+[{2}]\d+/)
elsif (/NEW\s+[{0}]\d+/)
因为测试要求W
和{
之间至少有一个空格,并且不允许{
之后的空格。