加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:38:52 所属栏目:百科 来源:网络整理
导读:我有一个正则表达式列表(大约10 – 15),我需要匹配一些文本.在循环中逐个匹配它们太慢了.但是,我没有编写自己的状态机来同时匹配所有正则表达式,而是尝试|个人正则表达式让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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读