正则表达式 – 如何判断Perl正则表达式模式中哪些替代项匹配?

我有一个正则表达式列表(大约10 – 15),我需要匹配一些文本.在循环中逐个匹配它们太慢了.但是,我没有编写自己的状态机来同时匹配所有正则表达式,而是尝试|个人正则表达式让perl完成工作.问题是我怎么知道哪些替代品匹配?

这个问题解决了每个正则表达式中没有捕获组的情况. (which portion is matched by regex?)如果每个正则表达式中都有捕获组怎么办?

所以有以下几点,

/^(A(\d+))|(B(\d+))|(C(\d+))$/

和字符串“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

相关文章

jquery.validate使用攻略(表单校验) 目录 jquery.validate...
/\s+/g和/\s/g的区别 正则表达式/\s+/g...
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母...
this.optional(element)的用法 this.optional(element)是jqu...
jQuery.validate 表单动态验证 实际上jQuery.validate提供了...
自定义验证之这能输入数字(包括小数 负数 ) <script ...