2013-12-09 32 views
0

我想使用重複計數{n}匹配並檢索像abababab這樣的序列。Perl匹配兩個字符並重復計數

此正則表達式

my $rec = "xxxxxxababababxxxxxx"; 
$rec =~ /(ab{4})/; 
print $1,"\n"; 

不起作用,因爲{4}只是指b。我如何使計數適用於多個字符?

回答

7

您必須通過將它們括在括號中來組合要重複的字符。在Perl正則表達式中,(?:…)與純圓括號相同,但不包含捕獲的內容。

所以,你要

$rec =~ /((?:ab){4})/; 
+0

非常感謝。我真的很想知道我在哪裏可以找到這樣的語法。我查看了幾本perl書籍和網站,但找不到這個解決方案。 – giordano

+1

在命令行鍵入「perldoc perlre」將爲您提供Perl正則表達式的完整文檔。 –

+1

@giordano:使用普通的捕獲括號'/((ab){4})/',該模式可以正常工作,但效率略低,因爲它每次都將'ab'捕獲到'$ 2'中。有許多以'(?'開頭並且被稱爲[*擴展模式*](http://perldoc.perl.org/perlre.html#Extended-Patterns)的結構。 – Borodin

1

「我想匹配和檢索序列 ABABABAB ...」(斜體礦)

這裏的匹配任何一組更普遍的正則表達式兩個(非換行)字符連續重複四次:

use strict; 
use warnings; 

my $rec = "xxxxxxababababxxxxxx"; 
my ($capture) = $rec =~ /((..)\2{3})/; 
print $capture; 

輸出:

abababab 

\2表示法表示在先前的捕獲組中捕獲的內容。因此,正則表達式'說''匹配兩個字符,然後匹配這兩個字符的三個實例。「

希望這會有所幫助!

+0

感謝這個正則表達式規則。非常有用的。 – giordano

+0

@giordano - 你很受歡迎! – Kenosis