如何在正则表达式中获得最低匹配组号?
假设有一个正则表达式
/(a(b))|(b(1))|(c(4))/...
例如输入字符串是 "b1" ,最低匹配组没有 2. ($2)
例如输入字符串是 "c4" ,最低匹配组没有 5. ($5)
例如输入字符串是 "ab" ,最低匹配组没有 1. ($1)
我有一个解决方案,但效率不高。谢谢大家的尝试。真正的问题是效率。许多人提供了我发现的类似解决方案。问题是线性时间搜索最低组。O(N) 其中 n 是捕获组的数量。我想知道是否有更快的方法。O(1) 这就是这个问题的目的。我希望 Perl 有一个隐藏的特性来获得这个值。我想没有。
同时我自己找到了解决方案,在这里..
/(a(b)(??{ $first=1;"" }))|(b(1)(??{ $first=2;"" }))|(c(4)(??{ $first=5;"" }))/
找出 $first 的时间是 O(1)。
if (@matches = $conv::content =~/$conv::trtree{convertsourceregqr}[$conversionno]/)
{
my $firstno;
my $c = 0;
for my $m (@matches)
{
if (defined $m)
{
$firstno=$c;
last;
}
$c++;
}**strong text****strong text**