Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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
Regex Perl单行正则表达式抛出bash:意外标记`)附近的语法错误&x27;_Regex_Perl_Bash - Fatal编程技术网

Regex Perl单行正则表达式抛出bash:意外标记`)附近的语法错误&x27;

Regex Perl单行正则表达式抛出bash:意外标记`)附近的语法错误&x27;,regex,perl,bash,Regex,Perl,Bash,我有一个PERL one liner,我试图对包含逗号分隔的电子邮件地址列表的配置文件使用它 perl -nle 'print for m/\* Members= (\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g' 返回bash: syntax error near unexpected token `)' 似乎正则表达式与shell的关系不太好。我怀疑有些东西没有被正确地转义,但是由于错误的性质,正则表达式本身我不知

我有一个PERL one liner,我试图对包含逗号分隔的电子邮件地址列表的配置文件使用它

perl -nle 'print for m/\* Members= (\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g'
返回bash:

syntax error near unexpected token `)'

似乎正则表达式与shell的关系不太好。我怀疑有些东西没有被正确地转义,但是由于错误的性质,正则表达式本身我不知道该去哪里寻找。有什么想法吗?

那是因为你希望在正则表达式中有一个引用,但shell不知道。这一次,您可以在Perl表达式周围使用双引号:

perl -nle "print for m/\* Members= (\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g"
更一般地说,您需要使用
'\'
技巧:

perl -nle 'print for m/\* Members= (\w+([-+.'\'']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g'

“\”
在shell中的单引号字符串中嵌入单引号;第一个引号关闭当前单引号字符串;反斜杠引号嵌入一个引号;最后一个引号开始一个新的单引号字符串。

这是因为您希望在正则表达式中有一个单引号,但shell不知道。这一次,您可以在Perl表达式周围使用双引号:

perl -nle "print for m/\* Members= (\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g"
更一般地说,您需要使用
'\'
技巧:

perl -nle 'print for m/\* Members= (\w+([-+.'\'']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g'

“\”
在shell中的单引号字符串中嵌入单引号;第一个引号关闭当前单引号字符串;反斜杠引号嵌入一个引号;最后一个引号将开始一个新的单引号字符串。

您的问题位于第一个逻辑组中;
正在关闭要在您希望对其求值之前对其求值的字符串

perl -nle 'print for m/\* Members= (\w+([-+.' <-- that character

您的问题位于您的第一个逻辑组中;
正在关闭要在您希望对其求值之前对其求值的字符串

perl -nle 'print for m/\* Members= (\w+([-+.' <-- that character
正如其他人所说,使用
而不是

您的正则表达式末尾还有一个错误:

([,])*)*$/i)/g
必须写上:

(,)*$/ig
我不确定您的正则表达式是否能满足您的要求,请显示文件中的一些行以便给您提供更好的答案。

正如其他人所说,使用
而不是

您的正则表达式末尾还有一个错误:

([,])*)*$/i)/g
必须写上:

(,)*$/ig

我不确定您的正则表达式是否能满足您的要求,请显示文件中的一些行,以便给您提供更好的答案。

我想这里突出显示的彩色语法很好地回答了您的问题:)是的,直到您指出,我才注意到这一点。:)我想这里的彩色语法突出显示很好地回答了您的问题:)是的,直到您指出它之前,我都没有注意到。:)隐马尔可夫模型。。。现在我得到了:无与伦比的)在正则表达式;以@oljones为标志:那是因为你真正拥有的
在你的模式中更多。我不确定这些额外的是因为复制和粘贴太多,还是应该是
\)
,或者什么。嗯。。。现在我得到了:无与伦比的)在正则表达式;以@oljones为标记:那是因为你的模式中的
确实比
多。我不确定这些额外的是因为复制和粘贴太多,还是应该是
\)
,或者什么。与上面相同的错误<正则表达式中的代码>不匹配);标记为无法在单引号字符串中转义单引号。与上述错误相同<正则表达式中的代码>不匹配);标记为无法在单引号字符串中转义单引号。