拍摄组的最大数量,如何找到拍摄组在正则表达式的最大值是多少?我知道我可以使用$ 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