根据 UltraEdit 的语法突出显示,Perl 正则表达式看起来不正确

Perl regular expression looks incorrect according to syntax highlighting of UltraEdit

之前的 post 看起来很接近我想尝试的:Multiple Substitutions

以下是我要进行的替换:

$description =~ s/\"/\"/g;
$description =~ s/\n/<br>/g;

当我使用 UltraEdit 查看我的 CGI 脚本时,它看起来不正确。如果我注释掉第一行 ($description =~ s/\"/\"/g;) 所有代码看起来都不错。

我不明白错误是什么?

我没有UltraEdit,但我有时会遇到与Emacs perl-mode 相同的情况。解决方案通常是添加一个带有结束引号字符的注释,即:

$description =~ s/\"/\"/g;  # " Satisfy the angry syntax highlighting gremlins
$description =~ s/\n/<br>/g;

您的里程可能会有所不同。

活动文件是 Perl 语法突出显示的文件,如 UltraEdit 主 window 底部状态栏中的字符串 Perl 所示,从主菜单在 UltraEdit 中打开高级-配置-编辑器显示-语法高亮.

Perl 已在 已安装的 wordfiles 列表中选择(或在旧版本中选择 Language UltraEdit 的)。单击按钮 Open 打开包含 Perl 语法高亮定义的 word 文件。应使用 Cancel.

关闭配置对话框

随 UltraEdit v22.0 安装的 Perl 的语法高亮 wordfile 的第一行是:

/L5"Perl" PERL_LANG EnableMLS Line Comment = # Line Comment Preceding Chars = [~[^]^^$/\(] Block Comment On = =pod Block Comment Off = =cut Block Comment On Alt = =item Block Comment Off Alt = =cut Escape Char = \ File Extensions = CGI PL PM PLX

关于此语法高亮问题的重要事项是:

  1. 启用MLS
    启用多行字符串突出显示,因为在 Perl 中一个字符串可以跨越多行。

  2. 转义字符=\
    它定义了字符串中双引号和单引号的转义字符。

  3. 字符串字符数 = "'
    此处不存在导致使用内部默认字符标记字符串的开始和结束,这是一个双引号和一个单引号。

UltraEdit 没有用于语法高亮显示的真正 Perl 语言智能感知。因此它不知道示例块第一行的双引号在 Perl 正则表达式中,因此应该完全忽略以突出显示字符串。

正则表达式中的第一个双引号被忽略,因为用反斜杠转义了。但是第二个双引号没有转义,因此 UltraEdit 的语法高亮引擎将其解释为字符串的开头,并突出显示下一个未转义双引号之前的所有内容作为字符串。

第二个双引号也可以用反斜杠转义,以便在 UltraEdit 中正确突出显示语法,即

$description =~ s/\"/\\"/g;

第一个或第二个双引号是否必须用于此正则表达式中转义的 Perl 解释器。但是这样做仍然有助于在 UltraEdit 和大多数其他文本编辑器中正确突出显示此行。

Perl 的 wordfile 可以关闭,因为在 wordfile 中无法对这个语法突出显示问题进行任何操作。

我同意Lucas Trzesniewski的评论:只有perl可以解析Perl。

顺便说一句:通过在单独的行上向颜色组添加单引号或双引号,可以使用与双引号字符串不同的颜色突出显示单引号字符串。例如追加

/C9"Single Quoted Strings"
'

当使用支持多达 20 个颜色组的 UltraEdit >= v17.00 时,结果使用为颜色组 9 定义的颜色和字体样式突出显示单引号字符串,而双引号字符串仍然使用为字符串定义的颜色和字体样式突出显示. UltraEdit < v17.00 以及 UEStudio < v11.00 仅支持最多 8 个颜色组。有关语法高亮定义的更多信息,请参阅 UltraEdit 论坛页面 template for syntax highlighting language wordfile