我想使用重複計數{n}
匹配並檢索像abababab
這樣的序列。Perl匹配兩個字符並重復計數
此正則表達式
my $rec = "xxxxxxababababxxxxxx";
$rec =~ /(ab{4})/;
print $1,"\n";
不起作用,因爲{4}
只是指b
。我如何使計數適用於多個字符?
我想使用重複計數{n}
匹配並檢索像abababab
這樣的序列。Perl匹配兩個字符並重復計數
此正則表達式
my $rec = "xxxxxxababababxxxxxx";
$rec =~ /(ab{4})/;
print $1,"\n";
不起作用,因爲{4}
只是指b
。我如何使計數適用於多個字符?
您必須通過將它們括在括號中來組合要重複的字符。在Perl正則表達式中,(?:…)
與純圓括號相同,但不包含捕獲的內容。
所以,你要
$rec =~ /((?:ab){4})/;
「我想匹配和檢索序列像 ABABABAB ...」(斜體礦)
這裏的匹配任何一組更普遍的正則表達式兩個(非換行)字符連續重複四次:
use strict;
use warnings;
my $rec = "xxxxxxababababxxxxxx";
my ($capture) = $rec =~ /((..)\2{3})/;
print $capture;
輸出:
abababab
\2
表示法表示在先前的捕獲組中捕獲的內容。因此,正則表達式'說''匹配兩個字符,然後匹配這兩個字符的三個實例。「
希望這會有所幫助!
非常感謝。我真的很想知道我在哪裏可以找到這樣的語法。我查看了幾本perl書籍和網站,但找不到這個解決方案。 – giordano
在命令行鍵入「perldoc perlre」將爲您提供Perl正則表達式的完整文檔。 –
@giordano:使用普通的捕獲括號'/((ab){4})/',該模式可以正常工作,但效率略低,因爲它每次都將'ab'捕獲到'$ 2'中。有許多以'(?'開頭並且被稱爲[*擴展模式*](http://perldoc.perl.org/perlre.html#Extended-Patterns)的結構。 – Borodin