拍攝組的最大數量,如何找到拍攝組在正則表達式的最大值是多少?我知道我可以使用$ 1,$ 2等來引用第一,第二等捕獲的組。但是,我如何找到這些組的最大數量?通過捕獲的組,我的意思是由一個正則表達式匹配的字符串。例如:如果正則表達式是(a +)(b +)c +,則字符串「abc」與該正則表達式匹配。第一個被捕的組將是1美元,第二個將是2美元。在考慮在Perl正則表達式Perl的正則表達式
3
A
回答
4
amon
暗示在回答這個問題時,他提到了%+
哈希值。但是,你需要什麼是@+
數組:
@+
此數組保存上次成功子匹配的末端的偏移量在當前活躍的動態範圍。 $ + [0]是整個匹配結束字符串的偏移量。這與pos函數在匹配的變量上調用時返回的值相同。該數組的第n個元素保存第n個子匹配的偏移量,因此$ + 1是$ 1結束的偏移量,$ + [2]是$ 2結束的偏移量,以此類推。 您可以使用$#+確定上次成功匹配的子組數。請參閱爲@ - 變量提供的示例。 [enphasis加入]
$re = "(.)" x 500;
$str = "a" x 500;
$str =~ /$re/;
print "Num captures is $#+"; # outputs "Num captures is 500"
0
捕獲的數量是無限的用途不同。儘管可以通過變量訪問9個捕獲,但可以使用更多捕獲組。
如果你有以上幾個捕獲組的更多,你可能想使用命名捕獲,像
my $str = "foobar";
if ($str =~ /(?<name>fo+)/) {
say $+{name};
}
輸出:foo
。您可以通過%+
哈希訪問命名捕獲的值。
0
您可以使用如下代碼給你捕獲組的計數:
$regex = qr/..../; # Some arbitrary regex with capture groups
my @capture = '' =~ /$regex|()/; # A successful match incorporating the regex
my $groups_in_my_regex = scalar(@capture) - 1;
它的工作方式是,它執行的匹配必須成功,然後檢查許多捕獲組是如何創建的。 (額外一個創建由於尾隨|()
編輯:事實上,它似乎沒有必要添加額外的捕獲組就只要匹配是保證成功,那麼陣列將包含每一個拍攝組的條目
因此,我們可以改變第二和第三行:
my @capture = '' =~ /$regex|/; # A successful match incorporating the regex
my $groups_in_my_regex = scalar(@capture);
相關問題
- 1. 正則表達式在Perl
- 2. Perl正則表達式在\
- 3. 正則表達式在Perl
- 4. Perl正則表達式在@
- 5. Perl的正則表達式
- 6. Perl的正則表達式
- 7. Perl:正則表達式
- 8. perl redirectmatch正則表達式
- 9. Perl正則表達式
- 10. Perl正則表達式\ U
- 11. Perl正則表達式
- 12. 用perl正則表達式
- 13. PCRE - perl正則表達式
- 14. 正則表達式 - Perl
- 15. Perl Oneliner正則表達式
- 16. 正則表達式用Perl
- 17. Javascript/Perl正則表達式
- 18. Perl的正則表達式 - 動態正則表達式
- 19. 正則表達式中的perl正則表達式
- 20. perl正則表達式:使用正則表達式捕獲
- 21. 將Perl正則表達式轉換爲SQL正則表達式
- 22. 將Perl正則表達式轉換爲Python正則表達式
- 23. 將Perl正則表達式轉換爲POSIX正則表達式
- 24. 將perl正則表達式轉換爲python正則表達式
- 25. 擴展Perl正則表達式以考慮更多字符?
- 26. 正則表達式在Perl/TCL
- 27. 正則表達式錯誤在Perl
- 28. 正則表達式搜索,並在Perl
- 29. Ungreedy正則表達式在Perl
- 30. 小號///和正則表達式在Perl
我知道捕獲的數目是無限的。但它不能無限的給定的正則表達式的權利?通過捕獲的組,我的意思是與給定的字符串相匹配的pamental中的正則表達式部分。 – Arjun
'$ 10','$ 11',[etc.](http://stackoverflow.com/a/12117671/168657)也適用於超過9個組的情況。 – mob