如果我在Perl中获得regexp,我可以找出有多少个捕获括号吗? 所以,例如:
\w -> 0
(\w) -> 1
(\w(\w)) -> 2
答案 0 :(得分:4)
你想知道有多少匹配或多少套括号?如果您希望能够计算括号,那么您可能需要查看一个解析分隔文本的Text::Balanced模块。
另一方面,如果你想知道匹配的情况,最好在列表上下文中执行正则表达式:
my @matches = $string_to_match_on =~ /(\w(\w))/;
列表的大小将为您提供匹配数量:
my $count = @matches;
(作为标量上下文中的列表或数组给出列表或数组的大小)。
答案 1 :(得分:2)
重要的是要知道为什么需要这个。
YAPE::Regex有帮助吗?
编辑:以下是演示:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use YAPE::Regex;
my $regex = qr/^(A)(B)(C)[0-9]+(\w+)$/;
my $parser = YAPE::Regex->new($regex);
my $n_captures;
while (my $node = $parser->next) {
if ( $parser->state =~ /^capture\(([0-9]+)\)$/ ) {
$n_captures = $1;
}
}
print "$n_captures\n";
C:\Temp> t
4
答案 2 :(得分:1)
有两个特殊的数组@ - 和@ +包含起始位置 和成功比赛的结束位置。使用数组长度 匹配完成后。
静态分析:要知道解析正则表达式字符串所需的所有对。 计算所有未关闭的未开启的开口括号。
答案 3 :(得分:1)
并非所有括号都没有捕获 - 例如(?:...),(?= ...)等等,这并不是一件轻而易举的事。
一般来说,记住你总是可以:
my @catch_all = $string =~ m/......................./;
然后只需检查@catch_all;