我已经定义了一个可重复使用的正则表达式来匹配某个字符串,该字符串以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他们需要用3美元替换2美元,即他们需要知道并记住我的正则表达式包含括号
if('ae01-demux02' =~ /($regexDemuxOrAe)-($regexDemuxOrAe)/)
{
print "$1 $3";
}
问题来自正则表达式中具有多于1个含义的括号。他们描述了要提取的内容以及他们还描述了“或”的边界。有没有办法在没有括号的情况下编写我的第三个正则表达式,或者将这些括号标记为不匹配?