我想匹配以下型別的字串:
S10101010...
下面的腳本只匹配/列印“S10”。我該如何解決?
$in = <STDIN>;
print $in=~/S(10) /;
uj5u.com熱心網友回復:
您可以分組,但不要捕獲,10使用(?:)
use warnings;
use strict;
my $in = 'abc S101010 def';
$in =~ /(S(?:10) )/;
print "$1\n";
外部括號將捕獲到$1.
印刷:
S101010
參考perldoc perlre
uj5u.com熱心網友回復:
要檢查它是否完全匹配,您需要
/^S(?:10) \z/
^表示字串的開始。
\z表示字串結束。
(?:...)用于在正則運算式中分組。((...)是一個捕獲)。
chomp如果您從 STDIN 讀取,請不要忘記使用來清除最后的換行符,或者使用$而不是\z允許尾隨換行符。
比賽將在$&.
if ( "S10101010" =~ /^S(?:10) \z/ ) {
say $&; # S10101010
}
您也可以使用捕獲。
if ( my ($match) = "S10101010" =~ /^ ( S(?:10) ) \z/x ) {
say $match; # S10101010
}
(也使用了 允許的空格/x。)
當然,由于您要匹配整個字串,因此您也可以只列印輸入,如下面的完整示例所示:
use 5.014;
use warnings;
defined( my $s = <> )
or die("Premature EOF\n");
chomp($s);
if ( $s =~ /^S(?:10) \z/ ) {
say $s;
} else {
say "[no match]";
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316080.html
