div*_*ero 3 regex perl capture regex-group
我有一个正则表达式列表(大约10 - 15),我需要匹配一些文本.在循环中逐个匹配它们太慢了.但是我没有编写自己的状态机来同时匹配所有正则表达式,而是尝试|单独的正则表达式并让perl完成工作.问题是我怎么知道哪些替代品匹配?
这个问题解决了每个正则表达式中没有捕获组的情况.(哪个部分与正则表达式相匹配?)如果每个正则表达式中都有捕获组怎么办?
所以有以下几点,
/^(A(\d+))|(B(\d+))|(C(\d+))$/
Run Code Online (Sandbox Code Playgroud)
和字符串"A123",我怎么能知道A123匹配并提取"123"?
您不需要编写自己的状态机来组合正则表达式.看看Regexp:Assemble.它有一些方法可以跟踪哪些初始模式匹配.
编辑:
use strict;
use warnings;
use 5.012;
use Regexp::Assemble;
my $string = 'A123';
my $re = Regexp::Assemble->new(track => 1);
for my $pattern (qw/ A(\d+) B(\d+) C(\d+) /) {
$re->add($pattern);
}
say $re->re; ### (?-xism:(?:A(\d+)(?{0})|B(\d+)(?{2})|C(\d+)(?{1})))
say for $re->match($string); ### A(\d+)
say for $re->capture; ### 123
Run Code Online (Sandbox Code Playgroud)