簡體   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