如何獲得正則表達式中最低的匹配組號?如何獲得最低匹配的captureno?
假設有一個正則表達式
/(a(b))|(b(1))|(c(4))/...
例如輸入字符串爲 「B1」,最低的匹配組無2.($ 2)
例如輸入字符串爲 「C4」,最低的匹配組沒有5.($ 5)
例如輸入字符串爲「AB」,最低的匹配組無1.($ 1)
我有一個解決方案,但它不是很有效。 Thakns所有的嘗試。 真正的問題是效率。許多人提供了類似的解決方案。 問題是線性時間搜索最低組。 O(N)其中n是捕獲組的數量。 我想知道是否有更快的方法。 O(1)這是這個問題的目的。 我預計Perl有一個隱藏功能來獲得該值。我想沒有。
同時我發現溶液自己,在這裏它是..
/(A(B)(?? {$第一= 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**
你是什麼意思的「最低匹配組」? – Toto
正則表達式中的代碼塊是[實驗性的](http://perldoc.perl.org/perlre.html#Extended-Patterns)。我已經添加了一個更新[我的答案](http://stackoverflow.com/a/13689587/468327),根據你的用例,它('(?|)')或命名捕獲應該做你需要的不用擔心使用實驗性功能。 –