gpt4 book ai didi

regex - 定义可重用的正则表达式

转载 作者:行者123 更新时间:2023-12-04 02:55:06 25 4
gpt4 key购买 nike

我定义了一个可重用的正则表达式来匹配以单词 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 个含义。它们描述了要提取的内容,并且还描述了“或”的边界。有什么方法可以编写不带括号的第三个正则表达式,或者将这些括号标记为不匹配吗?

最佳答案

my $regexDemuxOrAe = qr/(?:demux|ae)\d+/;

?:将使括号聚集但不捕获(无反向引用)。

请注意,您可能需要通过 qr// 获得一流的正则表达式对象运算符,而不是字符串。

例子:

$ perl -E '$re = qr/(?:demux|ae)\d+/;
> print "$1 $2" if $ARGV[0] =~ /($re)-($re)/' ae01-demux02
ae01 demux02

关于regex - 定义可重用的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16805297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com