gpt4 book ai didi

regex - 我怎样才能将一系列替换项插入到Perl正则表达式中?

转载 作者:行者123 更新时间:2023-12-01 09:48:02 25 4
gpt4 key购买 nike

是否可以做:

@foo = getPileOfStrings();

if($text =~ /@foo(*.?)@foo/)
{
print "Sweet, you grabbed a $1! It lived between the foos!";
}

这是怎么回事,我需要一个 $text =~ /($var1|$var2|$var3)(*.?)($var1.../;我不知道有多少个值,并且直到运行时才知道这些值。

将数组插值到一组OR中似乎是执行此操作的直接方法,但是它似乎无法正常工作,而且我进入了一组曲折的代码中……完全一样!

最佳答案

使用 join qr// 运算符:

my $strings = join "|", getPileOfStrings();
my $re = qr/$strings/; #compile the pattern

if ($text =~ /$re(*.?)$re/)

如果您希望使用相同的单词来分隔中间的内容,请说:
if ($text =~/($re)(.*?)\1/)

如果字符串可能包含Perl正则表达式认为特殊的字符,则您可能需要使用 map quotemeta 来防止正则表达式使用它们:
my $strings = join "|", map quotemeta, getPileOfStrings();

而且,正如迈克尔·卡曼(Michael Carman)所指出的那样,如果 getPileOfStrings()并非旨在按您希望匹配的顺序返回字符串,则您可能希望使用 sort 强制最长的匹配项在替换项中排在首位(交替将在Perl 5中首先匹配):
my $strings = join "|" map quotemeta,
sort { length $a <=> length $b } getPileOfStrings();

请记住在运行quotemeta之前先进行排序,因为 "a..."(长度4)将被转换为比 "a\\.\\.\\."(长度5)长的 "aaaaaa"(长度6)。

关于regex - 我怎样才能将一系列替换项插入到Perl正则表达式中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296653/

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