如何解决如何解决“正则表达式中的空转左括号在这里在正则表达式中是非法的”错误?
我正在尝试配置一个使用生成的Perl脚本的构建。运行配置脚本(Perl版本v5.26.1)时出现此错误
Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/^(.*)\$ENV{ <-- HERE (.*)}(.*)$/
有问题的代码是
if($text =~/^(.*)\$ENV{(.*)}(.*)$/){
$text = $1.$ENV{$2}.$3;
}
我对Perl还是很陌生,有人可以帮忙吗?TY
解决方法
Perl 5.26进行了一项更改,要求转义大括号。这是讨论它的Perl更新日志:https://perldoc.perl.org/5.26.0/perldelta.html
大概该脚本是针对Perl的早期版本编写的...
如果Perl脚本仍保留在某个地方,我建议您提交错误或(更好)发布PR来解决此问题。
否则,您可以使用Perl的较早版本,也可以修复本地副本。
编辑 修复示例:
if($text =~/^(.*)\$ENV\{(.*)\}(.*)$/){
$text = $1.$ENV{$2}.$3;
}
,
要回答您的特定问题,您需要以与示例中的$
相同的方式转义花括号-带有反斜杠,如下所示:
if ($string =~ /\{\}/) { ... }
或者它们可以在方括号内用作字符类:
if ($string =~ /[{}]/) { ... }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。