Regex perl正则表达式替换
我是perl新手,我发现这个表达式有点难以理解Regex perl正则表达式替换,regex,perl,substitution,Regex,Perl,Substitution,我是perl新手,我发现这个表达式有点难以理解 $a =~ s/\'/\'\"\'\"\'/g 有人能帮我理解这段代码的作用吗?这种代码的和平将每一句话都替换为“”所有的\都是无用的(但无害的),因此它相当于s/'/'''''/g。它将字符串中的每个'替换为''' 这通常用于shell报价。例如,参见不清楚哪一部分是问题。下面是对每一种情况的简要介绍 表达式$str=~s/pattern/replacement/是一个正则表达式,将字符串$str中与“pattern”匹配的部分替换为“repl
$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
块中,这样它就使用可变宽度字体,您可以立即看到为什么有人会使用不必要的反斜杠。因为您的答案中显示的内容几乎是所有的”
和“
像那样聚在一起,无法辨别。