繁体   English   中英

Perl正则表达式的麻烦

[英]Perl regular expressions troubles

我有一个变量$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"/>

我不明白我在做什么错。 我用正则表达式测试器检查过,看起来还不错。 有人可以发现我的错误吗?

s///的返回值是它进行的替换数目 ,在您的情况下为9。如果您至少使用perl 5.14,请在替换中添加r标志:

如果使用“ / r”(非破坏性)选项,则它将在字符串的副本上运行替换,并且不返回替换数,而是返回副本(无论是否发生替换)。 使用“ / r”时,原始字符串永远不会更改。 即使输入是对象或绑定变量,该副本也始终是纯字符串。

否则,请经过这样的临时变量:

my $version = $rowref->[5];
$version =~ s/([^0-9\.])//g;
$artifact->set_att(version => $version);

该正则表达式替换改变varialbe到位但返回它制成取代数目( 1/g改性剂,如果是成功的)。

my $str = 'words 123';
my $ret = $str =~ s/\d/numbers/g;
say "Got $ret. String is now: $str";

您可以先进行替换, $rowref->[5] =~ s/...//; ,然后使用更改后的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM