Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl regexp中匹配第一个结束括号_Regex_Perl - Fatal编程技术网

在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+