我有一个变量$rowref->[5]
,其中包含字符串:
" 1.72.1.13.3.5 (ISU)"
我正在使用XML::Twig
来构建修改XML文件,此变量包含某些内容版本号的信息。所以我想摆脱空白和(ISU)。我尝试使用替换和XML::Twig
来设置属性:
$artifact->set_att(version=> $rowref->[5] =~ s/([^0-9\.])//g)
有趣的是我在输出中得到的是
<artifact [...] version="9"/>
我不明白我做错了什么。我检查了regular expression tester,看起来很好。有人可以发现我的错误吗?
答案 0 :(得分:4)
s///
的返回值是它所做的替换次数,在您的情况下为9.如果您至少使用perl 5.14,请添加r
标志为替换:
如果使用“/ r”(非破坏性)选项,则运行 替换字符串的副本而不是返回 替换次数,无论是否返回副本 发生了替代。原始字符串永远不会更改 使用“/ r”。副本将始终是一个纯字符串,即使是 input是一个对象或一个绑定变量。
否则,请通过这样的临时变量:
my $version = $rowref->[5];
$version =~ s/([^0-9\.])//g;
$artifact->set_att(version => $version);
答案 1 :(得分:1)
正则表达式替换会更改变量,但返回它所做的替换次数(1
没有/g
修饰符,如果成功的话)。
my $str = 'words 123';
my $ret = $str =~ s/\d/numbers/g;
say "Got $ret. String is now: $str";
您可以先进行替换,$rowref->[5] =~ s/...//;
,然后使用更改的变量。