我希望能夠使用通過嵌入的 Perl 代碼中的最后一個捕獲組 (?{...})
'foobar' =~ /(oo)(bar)(?{ $word = ${-1} })/
我上面的嘗試失敗了。我希望變數在正則運算式之后$word具有字串bar。
uj5u.com熱心網友回復:
你想要類似的東西:
my $word = 'var';
my @match = 'foobar' =~ /(oo)(bar)/;
$word = $match[-1];
print $word, "\n";
輸出:
bar
[編輯]
通過使用命名捕獲,您可以說:
my $word = "var";
'foobar' =~ /(?<g>oo)(?<g>bar)(?{$word=${$-{'g'}}[-1]})/;
print $word, "\n";
=> bar
如果您的 perl 版本是 5.25 或更高版本,它支持特殊變數@{^CAPTURE},則以下代碼可能有效(未經測驗)。
'foobar' =~ /(oo)(bar)(?{$word=${^CAPTURE}[-1]})/;
uj5u.com熱心網友回復:
可以使用$ 變數
與上次成功搜索模式的最高使用捕獲組匹配的文本。它在邏輯上等同于具有定義值的編號最高的捕獲變數($1、$2、...)。
例子:
perl -wE'$v = shift // q(aabb); $v =~ /(a)(b)(?{ $m = $ })/; say $m' #--> b
這對于嵌套捕獲也可以按預期作業,因此(a(b))對于$ has b。
另請參閱類似但“略有不同” 的$^N 變數
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/417079.html
標籤:
