以前的帖子看起来很接近我想尝试的内容:多重替换
以下是我尝试做的替换:
$description =~ s/\"/\\"/g;
$description =~ s/\n/<br>/g;
当我使用它查看我的CGI
脚本时,UltraEdit
它看起来不正确。如果我注释掉第一行,($description =~ s/\"/\\"/g;)
所有代码看起来都不错。
我不明白错误是什么?
活动文件是 Perl 语法突出显示的文件,如 UltraEdit 主窗口底部的状态栏中由字符串Perl指示的,从主菜单Advanced-Configuration-Editor Display-Syntax Highlighting在 UltraEdit 中打开。
Perl已在已安装的 wordfiles列表中选择(或旧版本 UltraEdit 中的语言)。点击按钮Open打开包含Perl语法高亮定义的 wordfile 。配置对话框应使用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
关于此语法突出显示问题的重要内容是:
EnableMLS
启用多行字符串突出显示,就像在 Perl 中一样,字符串可以跨越多行。
Escape Char = \
定义字符串内双引号和单引号的转义字符。
String Chars = "'
此处不存在导致使用标记字符串开头和结尾的字符的内部默认值,该字符串是双引号和单引号。
UltraEdit 没有用于语法高亮的真正 Perl 语言智能感知。所以它不知道示例块第一行的双引号在 Perl 正则表达式中,因此应该完全忽略字符串突出显示。
正则表达式中的第一个双引号被忽略,因为用反斜杠转义。但是第二个双引号没有转义,因此 UltraEdit 的语法突出显示引擎将其解释为字符串的开头,并且现在突出显示直到下一个未转义的双引号作为字符串的所有内容。
第二个双引号也可以用反冲转义,以在 UltraEdit 中正确突出显示此处的语法,即
$description =~ s/\"/\\\"/g;
第一个或第二个双引号是否必须用于在此正则表达式中转义的 Perl 解释器。但是这样做有助于在 UltraEdit 和大多数其他文本编辑器中正确突出显示该行。
Perl 的 wordfile 可以关闭,因为在 wordfile 中无法对这个语法高亮问题做任何事情。
我同意Lucas Trzesniewski的评论:只有 perl 可以解析 Perl。
顺便说一句:通过将单引号或双引号添加到单独的行上的颜色组,可以突出显示与双引号字符串不同颜色的单引号字符串。例如附加
/C9"Single Quoted Strings"
'
当使用 UltraEdit >= v17.00 支持多达 20 个颜色组时,导致突出显示具有为颜色组 9 定义的颜色和字体样式的单引号字符串,而双引号字符串仍以为字符串定义的颜色和字体样式突出显示。UltraEdit < v17.00 以及 UEStudio < v11.00 最多仅支持 8 个颜色组。更多关于语法高亮定义的信息可以在 UltraEdit 论坛页面模板上阅读语法高亮语言 wordfile。
我没有 UltraEdit,但我有时会遇到与 Emacs perl-mode 相同的情况。解决方案通常是添加带有右引号字符的注释,即:
$description =~ s/\"/\\"/g; # " Satisfy the angry syntax highlighting gremlins
$description =~ s/\n/<br>/g;
你的旅费可能会改变。