perl正则表达式替代

时间:2016-05-15 21:47:33

标签: regex perl substitution

我是perl的新手,我觉得这个表达有点难以理解

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

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

4 个答案:

答案 0 :(得分:2)

目前尚不清楚哪一部分是个问题。这里简要提一下每一个。

表达式$str =~ s/pattern/replacement/是一个正则表达式,用"模式"替换字符串$str的一部分,由&#替换34;替换&#34 ;.最后使用/g,对于"模式的所有实例都会这样做。在字符串中找到。还有更多内容 - 请参阅tutorialquick startreference以及perlreperlop中的完整信息。

某些字符具有特殊含义,特别是在"模式"中使用时。常见的集合是.^$*+?()[{\|,但这取决于正则表达式的 flavor 。此外,任何用作分隔符(通常为/)的东西也必须进行转义。请参阅文档,例如this post。如果要在字符串中使用这些字符中的任何一个作为文字字符,则必须使用反斜杠转义。 (另请参阅约escaped sequences。)在您的示例中,'已转义,用作替换的字符也是如此。

事实上,这些事实上并不需要逃脱。所以这个工作

use strict;
use warnings;

my $str = "a'b'c";
$str =~ s/'/'"'/g;
print "$str\n";

打印所需的a'"'b'"'c。请注意,您仍然可以 转义它们,它会起作用。 '确实非常特殊的一种情况是在 one liner 中,它将整个代码分隔为通过shell提交给Perl,以便运行。 (但是,仅仅逃避它就行不通了。)总而言之,你所表达的表达方式与Jens的答案一样,但是有一个不需要的扭曲。

关于相关功能的说明:您几乎可以使用任何分隔符,而不仅仅是/。所以这个|patt|repl|很好,甚至可以这样:{patt}{repl}(除非它们在里面使用)。这有时非常方便,可以提高可读性。首先,你不必在正则表达式内逃脱/本身。

我希望这会有所帮助。

答案 1 :(得分:1)

其中的所有\都是无用的(但无害),因此等同于s/'/'"'"'/g。它会将每个'替换为字符串中的'"'"'

这通常用于shell引用。请参阅示例https://stackoverflow.com/a/24869016/17389

答案 2 :(得分:0)

这段代码的和平用'"'"'

取代每个单引号

答案 3 :(得分:0)

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

每个'我们都会用''''

代替