簡單,我想看看一個字段是否有9位數字,沒有別的。perl正則表達式使用重複/量詞
我是$ var = 123456789
(my $nine) = ($var =~ /\d{9}/);
從我的理解這個說, 「匹配一個數字的9倍,並沒有別的」
這個輸出1
但不是我期待的123456789
。爲什麼?
簡單,我想看看一個字段是否有9位數字,沒有別的。perl正則表達式使用重複/量詞
我是$ var = 123456789
(my $nine) = ($var =~ /\d{9}/);
從我的理解這個說, 「匹配一個數字的9倍,並沒有別的」
這個輸出1
但不是我期待的123456789
。爲什麼?
沒有什麼回來在列表環境正則表達式中,
所以默認是它將變量$nine
設置爲正則表達式函數調用的標量結果
。並且該函數調用返回標量上下文
匹配的數量。
如果你要改變,要(my $nine) = ($var =~ /\d/g);
$其中9含有9
添加捕獲緩衝圍繞數字。
即:
(my $nine) = ($var =~ /(\d{9})/);
然而,即使你對你的賦值語法將工作,
其傳統的把它寫爲
my ($nine) = $var =~ /(\d{9})/;
我是誰低估了你的答案的白癡。你錯了。 – Borodin 2014-11-23 23:06:05
謝謝。你的工作是爲了我的需要。 – 2014-11-23 23:17:21
你真的想這樣:
(my $nine) = ($var =~ /(\d{9})/);
的問題是,=~
是一個比較運營商,並表達($var =~ /\d{9}/)
的結果爲真(1)。在我的例子中添加括號使得正則表達式捕捉到它的匹配,所以它返回你的123456789
你的格局九(國際)數字字符任何地方序列中的字符串相匹配。您所看到的1
是一個true模式匹配返回的值說匹配成功。
如果你只是想驗證一個變量的內容是正是 9 ASCII數字,那麼你應該寫
if ($var =~ /\A[0-9]{9}\z/) { ... }
,或者,如果您有可用的ASCII /a
修飾符(任意版本Perl 5中的自14),那麼你可以說
if ($var =~ /\A\d{9}\z/a) { ... }
,你表現出「產出」什麼聲明。你期望'九美元'包含'123456789'嗎?如果'$ var'設置爲''abcdef9873239998782116tyra'',你想要什麼? – Borodin 2014-11-23 23:13:43