我已经定义了一个可重用的正则表达式来匹配以单词 demux 后跟数字开头的某个字符串
my $regexDemux = 'demux\d+';
和一个匹配以 ae 开头的单词
my $regexAe = 'ae\d+';
这些效果很好,可以根据需要在我的应用程序中重复使用。当我想定义一个匹配其中任何一个的正则表达式时,问题就来了
my $regexDemuxOrAe = '(demux|ae)\d+';
这可行,但它要求我的正则表达式的使用者知道它包含括号,并且它将对 $1、$2 等产生影响。例如,在第一个示例中,他们可以这样做:
if('demux123-demux456' =~ /($regexDemux)-($regexDemux)/)
{
print "$1 $2";
}
但要匹配 demux 或 ae,他们需要将 $2 替换为 $3,即他们需要知道并记住我的正则表达式包含括号
if('ae01-demux02' =~ /($regexDemuxOrAe)-($regexDemuxOrAe)/)
{
print "$1 $3";
}
问题来自正则表达式中的括号具有超过 1 个含义。它们描述了要提取的内容,还描述了“或”的边界。有什么方法可以编写没有括号的第三个正则表达式,或者将这些括号标记为不匹配?