Perl 正则表达式单引号

Posted

技术标签:

【中文标题】Perl 正则表达式单引号【英文标题】:Perl regex single quote 【发布时间】:2011-12-18 09:37:03 【问题描述】:

有人可以帮我运行下面的命令吗?我也试图逃避单引号,但没有运气。

perl -pi.bak -e 's/Object\.prototype\.myString='q'//' myfile.html

【问题讨论】:

【参考方案1】:

问题不在于 Perl,而在于您的 shell。要查看发生了什么,请尝试以下操作:

$ echo 's/Object\.prototype\.myString='q'//'
s/Object\.prototype\.myString=q//

要使其正常工作,您可以将每个单引号替换为 '\'',如下所示:

$ echo 's/Object\.prototype\.myString='\''q'\''//'
s/Object\.prototype\.myString='q'//

或者你可以只写几个字符:

$ echo 's/Object\.prototype\.myString='\'q\''//'
s/Object\.prototype\.myString='q'//

甚至只是:

$ echo 's/Object\.prototype\.myString='\'q\'//
s/Object\.prototype\.myString='q'//

甚至:

$ echo s/Object\\.prototype\\.myString=\'q\'//
s/Object\.prototype\.myString='q'//

双引号,如suggested by mu is too short,在这里也可以使用,但在其他情况下可能会导致意外,因为在 Perl 代码中常见的许多字符,如 $!\,具有特殊含义即使在双引号内也可以到 shell。

当然,另一种解决方案是将正则表达式中的单引号替换为八进制或十六进制代码 \047\x27

$ perl -pi.bak -e 's/Object\.prototype\.myString=\x27q\x27//' myfile.html

【讨论】:

就我而言,\x27 的推荐似乎是最简单可靠的——效果很好!【参考方案2】:

双引号应该可以:

perl -pi.bak -e "s/Object\.prototype\.myString='q'//" myfile.html

您可能想要也可能不想要该正则表达式上的 g 修饰符。您可能需要在之后执行diff 以确保您没有破坏 HTML。

【讨论】:

这对我有用。我想从变量 'name' 中删除引号和其他一些字符(空格、括号、-、.): prxchange("s/ |-|\.|(|)|\'//", -1,名称)

以上是关于Perl 正则表达式单引号的主要内容,如果未能解决你的问题,请参考以下文章

Perl 正则表达式匹配大型 Unicode 代码点

Perl——正则表达式 查找替换s///

python 正则表达式查找单引号内的所有单引号

正则表达式 - 单引号或双引号 -C#

正则表达式在单引号内转义双引号

在正则表达式中转义(\')单引号,它在两个单引号之间采用字符串。