gpt4 book ai didi

regex - Perl:重复一个模式 x 次,其中 x 是\d的匹配项

转载 作者:行者123 更新时间:2023-12-05 03:35:06 27 4
gpt4 key购买 nike

我匹配了一个特定的模式,另外还有一个数字通过

perl -pe 's/\(pattern\)(\d)/ ... /'

我知道我可以通过将 $1 放在 ... 所在的位置以及使用 $2 来访问数字来访问该模式。我现在如何在 ... 所在的位置重复模式 $2 次?更具体地说,我有一个像这样的表达式:

perl -pe 'while(s/Power\(((?:(?!Power\().)+?),2\)/(($1)*($1))/){}' file.txt

我想将其概括为不仅匹配 2,它在其中硬编码以重复 $1 两次,而且匹配任何数字 n 并重复 $1 n 次。所有这些仍然应该在一个类轮中完成。

因此,例如将脚本调用到像这样的表达式上

Power(Power(x,3),2)

应该返回

(((x)*(x)*(x))*((x)*(x)*(x)))

最佳答案

你可以使用

perl -pe 'while(s/Power\(((?:(?!Power\().)+?),(\d+)\)/"((". $1 . ")" . ("*(" . $1 . ")") x ($2-1) . ")"/e){}' file.txt

查看在线演示:

#!/bin/bash
s='Power(25,2) Power(225,4)'
perl -pe 'while(s/Power\(((?:(?!Power\().)+?),(\d+)\)/"((". $1 . ")" . ("*(" . $1 . ")") x ($2-1) . ")"/e){}' <<< "$s"
# => ((25)*(25)) ((225)*(225)*(225)*(225))

/e 标志将 RHS 视为表达式,替换是动态构建的,重复是在 x operator 的帮助下进行的.请注意,重复次数等于第 2 组捕获的次数减去 1

关于regex - Perl:重复一个模式 x 次,其中 x 是\d的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69975870/

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