【发布时间】:2013-04-23 11:56:50
【问题描述】:
在 Perl 中有没有一种方法可以保存和打印字符串变量中的所有反斜杠? 例如:
$str = 'a\\b';
输出是
a\b
但我需要
a\\b
问题是无法以任何方式处理字符串以转义反斜杠,因为 我必须从数据库中读取复杂的正则表达式,并且不知道它们出现在哪个组合和数字中,并且必须完全按照它们在网页上的形式打印它们。
我尝试使用模板工具包以及 html 和 html_entity 过滤器。到目前为止,唯一可行的方法是使用单引号此处的文档:
print <<'XYZ';
a\\b
XYZ
但是我不能插入变量,这使得这个解决方案毫无用处。
我尝试将字符串写入网页、文件和 shell,但没有运气,总是有一个反斜杠消失。也许我完全走错了路,但是打印复杂正则表达式的正确方法是什么,包括所有组合和数字中的反斜杠而不做任何更改?
换句话说:
我有一个包含数百个正则表达式作为字符串数据的数据库。我想用 perl 阅读它们并将它们打印在网页上,就像它们在数据库中一样。
许多管理员一直在对这些正则表达式进行更改,所以我事先不知道如何以及如何逃避。
一个典型的例子如下所示:
'C:\\test\\file \S+'
但它可能会在第二天更改为
'\S+ C:\\test\\file'
也许一个正确的结论是,无论它出现在哪个组合和哪个数字中,都将每个反斜杠精确地转义一次?这意味着它可以将它们加倍。那么问题就没有我担心的那么大了。我在 bash 上对其进行了测试,它可以连续使用两个甚至三个反斜杠(4 个反斜杠打印 2 个反斜杠,6 个反斜杠打印 3 个反斜杠)。
【问题讨论】:
-
请举例说明你想做什么。一旦反斜杠在变量中,它们将保持不变,并且如果它们被插入到字符串中,它们将正确显示。将一对反斜杠放入字符串 literal 的唯一方法是将它们加倍,但这应该不是问题。有几个软件层将反斜杠视为转义字符,因此您的问题可能不在 Perl 中。