Regex perl正则表达式替换

Regex perl正则表达式替换,regex,perl,substitution,Regex,Perl,Substitution,我是perl新手,我发现这个表达式有点难以理解 $a =~ s/\'/\'\"\'\"\'/g 有人能帮我理解这段代码的作用吗?这种代码的和平将每一句话都替换为“”所有的\都是无用的(但无害的),因此它相当于s/'/'''''/g。它将字符串中的每个'替换为''' 这通常用于shell报价。例如,参见不清楚哪一部分是问题。下面是对每一种情况的简要介绍 表达式$str=~s/pattern/replacement/是一个正则表达式,将字符串$str中与“pattern”匹配的部分替换为“repl

我是perl新手,我发现这个表达式有点难以理解

$a =~ s/\'/\'\"\'\"\'/g

有人能帮我理解这段代码的作用吗?

这种代码的和平将每一句话都替换为
“”
所有的
\
都是无用的(但无害的),因此它相当于
s/'/'''''/g
。它将字符串中的每个
'
替换为
'''


这通常用于shell报价。例如,参见

不清楚哪一部分是问题。下面是对每一种情况的简要介绍

表达式
$str=~s/pattern/replacement/
是一个正则表达式,将字符串
$str
中与“pattern”匹配的部分替换为“replacement”。对于字符串中找到的“模式”的所有实例,在结尾处使用
/g
。还有很多很多内容--请参阅和中的、a、和完整信息

有些字符具有特殊含义,尤其是在“模式”中使用时。一个常见的集合是
^$*+?()[{\\
,但这取决于正则表达式的风格。此外,任何用作分隔符的集合(通常是
/
)也必须进行转义。请参阅文档和示例。如果要将这些字符中的任何一个用作字符串中的文字字符,则必须使用反斜杠对其进行转义。(另请参见关于)。在您的示例中,
被转义,用作替换的字符也被转义

问题是,这些事实上不需要逃逸。所以这是可行的

use strict;
use warnings;

my $str = "a'b'c";
$str =~ s/'/'"'/g;
print "$str\n";
它打印所需的
a''b''c
。请注意,您仍然可以转义它们,并且它会工作。
'
确实非常特殊的一种情况是在一行程序中,它限定了通过shell提交给Perl以运行的整段代码。(但是,仅仅转义它是不起作用的。)总之,您显示的表达式与答案中的替换方式相同,但有一个不需要的扭曲

关于一个相关特性的注意事项:您几乎可以使用任何分隔符,而不一定只是
/
。因此,这个
|patt | repl |
很好,甚至它也是:
{patt}{repl}
(除非它们在内部使用)。这有时非常方便,大大提高了可读性。首先,您不必在正则表达式中逃避
/
本身


我希望这有点帮助。

可以通过删除不必要的后斜杠来简化 $a=~s/'/''''/g


每一个“将我们替换为“'”

都可以写得更简单:
$a=~s/'/'”““/g
公平地说,根据使用的字体,反斜杠可能有助于直观地分隔引号。当您这样键入代码时,而不是在
code
块中,这样它就使用可变宽度字体,您可以立即看到为什么有人会使用不必要的反斜杠。因为您的答案中显示的内容几乎是所有的
像那样聚在一起,无法辨别。