我如何知道 Perl 正则表达式模式中匹配的替代项是什么?

2023-12-28

我有一个正则表达式列表(大约 10 - 15 个),我需要将其与某些文本进行匹配。在循环中将它们一一匹配太慢了。但我不是编写自己的状态机来一次匹配所有正则表达式,而是尝试|单独的正则表达式并让 Perl 完成工作。问题是我如何知道哪个选项匹配?

这个问题解决了每个正则表达式中没有捕获组的情况。 (正则表达式匹配哪一部分? https://stackoverflow.com/questions/6701454/how-can-i-know-which-portion-of-a-perl-regex-is-matched-by-a-string)如果每个正则表达式中都有捕获组怎么办?

因此,通过以下内容,

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

和字符串“A123”,我怎样才能知道A123匹配并提取“123”?


您不需要编写自己的状态机来组合正则表达式。调查正则表达式:组装 https://metacpan.org/module/Regexp::Assemble。它有一些方法可以跟踪您的初始模式是否匹配。

Edit:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我如何知道 Perl 正则表达式模式中匹配的替代项是什么? 的相关文章

随机推荐