在perl regexp中匹配第一个结束括号
我有以下正则表达式:在perl regexp中匹配第一个结束括号,regex,perl,Regex,Perl,我有以下正则表达式: perl -pi -w -e "s/(\bgetnitemc)\(([^,]+),([^,]+)\)/\$1\(\$2,\$3,1,1,''\)/g;" d_*.sas 具有以下影响(git diff): 因此,第一行的行为符合预期。但是,在第二行中,我试图添加的部分(,1,1,“)应用于包装函数(insertc),而不是目标函数(getnitemc)。如果你能理解我的意思,它有点“跳过一个括号” 我哪里出错了?找到了!所以我认为否定运算符(^)在捕获中包含了结束括号 解
perl -pi -w -e "s/(\bgetnitemc)\(([^,]+),([^,]+)\)/\$1\(\$2,\$3,1,1,''\)/g;" d_*.sas
具有以下影响(git diff):
因此,第一行的行为符合预期。但是,在第二行中,我试图添加的部分(,1,1,“
)应用于包装函数(insertc
),而不是目标函数(getnitemc
)。如果你能理解我的意思,它有点“跳过一个括号”
我哪里出错了?找到了!所以我认为否定运算符(
^
)在捕获中包含了结束括号
解决方案:
perl -pi -w -e "s/(\bgetnitemc)\(([^,]+),([^,)]+)\)/\$1\(\$2,\$3,1,1,''\)/g;" d_*.sas
(
[^,)]
)简单的解决方案是从的参数列表中排除)
。匹配现有参数所需的全部内容是[^]*
经过一些清理,你得到了
perl -i -wpe's/\b(getnitemc\([^)]*)/$1,1,1,\x27\x27/g' d_*.sas
或
perl -i -wpe's/\b(getnitemc\([^)]*)/$1,1,1,\x27\x27/g' d_*.sas
perl -i -wpe's/\bgetnitemc\([^)]*\K/,1,1,\x27\x27/g' d_*.sas # 5.10+