我有一個變量,就像$ var = 1.2.3或$ var = Variable/1.2.3。我正在嘗試編寫一個匹配並存儲在$ 1中的正則表達式。代碼如下:Perl正則表達式OR條件
if ($var =~ m/[\w+\/\d+.\d+.\d+])/){
$a = $1;
}
我想匹配上述條件,如果任何$ var盛行。請建議我。謝謝。
我有一個變量,就像$ var = 1.2.3或$ var = Variable/1.2.3。我正在嘗試編寫一個匹配並存儲在$ 1中的正則表達式。代碼如下:Perl正則表達式OR條件
if ($var =~ m/[\w+\/\d+.\d+.\d+])/){
$a = $1;
}
我想匹配上述條件,如果任何$ var盛行。請建議我。謝謝。
您應該刪除該字符類。一個字符類只匹配一個字符。它不代表任何順序。此外,.
是正則表達式中的元字符。要從字面上匹配它,你需要逃避它。
然後,你需要/
爲可選之前,在部分,採用?
量詞,因爲它不一定出現在字符串:
if ($var =~ m/((?:\w+\/)?\d+\.\d+\.\d+)/){
$a = $1;
}
僅供參考,你可以使用任何分隔符匹配運算符,以免逃逸/
:
m!((?:\w+/)?\d+\.\d+\.\d+)!
這工作正常..謝謝@Rohit Jain – deep
Parentheses capture。它很容易出錯依賴於$1
,只需使用來自m
atch運算符的返回值。
for my $var ('1.2.3', 'Variable/1.2.3') {
if (my ($version) = $var =~ m{
(?:\A | /) # beginning of string or a slash
(\d+ [.] \d+ [.] \d+) # capture version number triple
\z # end of string
}msx) {
print ">>> $version <<<\n";
}
}
__END__
>>> 1.2.3 <<<
>>> 1.2.3 <<<
試試這個:
if ($var =~ m/(?>[a-z_][a-z0-9_]*+\/)?+[0-9]++\.[0-9]++\.[0-9]++/i) {
$a = $&;
}
我不明白的問題。也許你可以添加一些輸入和期望匹配的例子。 – theglauber
如果你想匹配一個文字'.',那麼你需要在你的正則表達式中使用反斜槓 - 轉義它。 'm /./''而不是'm /./' – ThisSuitIsBlackNot
或者daxim在他的回答中做了這樣的處理,把這個點放在括號裏:'m /[.]/' – ThisSuitIsBlackNot