[英]perl regular expressions substitue
我是perl的新手,我觉得这个表达有点难以理解
$a =~ s/\'/\'\"\'\"\'/g
有人可以帮我理解这段代码的作用吗?
目前尚不清楚哪一部分是问题。 这里简要提一下每一个。
表达式$str =~ s/pattern/replacement/
是一个正则表达式 ,用“替换”替换了由“pattern”匹配的字符串$str
的一部分。 最后用/g
对字符串中的“模式”的所有实例都这样做。 远远不止于此 - 请参阅教程 , 快速 入门 , 参考资料以及perlre和perlop中的完整信息。
某些字符具有特殊含义,特别是在“模式”中使用时。 一个常见的集合是.^$*+?()[{\\|
,但这取决于正则表达式的味道 。 此外,任何用作分隔符(通常为/
)的东西也必须被转义。 请参阅文档,例如本文 。 如果要在字符串中使用这些字符中的任何一个作为文字字符,则必须使用反斜杠对其进行转义 。 (另请参阅转义序列 。)在您的示例中, '
被转义,用作替换的字符也是如此。
事实上,这些实际上并不需要被转义。 这样可行
use strict;
use warnings;
my $str = "a'b'c";
$str =~ s/'/'"'/g;
print "$str\n";
它打印出所需a'"'b'"'c
。 请注意,你仍然可以逃避它们,它会工作。 '
确实非常特殊的一种情况是在一个单行中 ,它将整个代码分隔为通过shell提交给Perl,以便运行。 (但是,仅仅逃避它就不起作用了。)总而言之,你所表达的表达式就像Jens的回答一样,但是有一个不需要的扭曲。
关于相关功能的注释:您几乎可以使用任何分隔符,而不仅仅是/
。 所以这个|patt|repl|
很好,甚至这是: {patt}{repl}
(除非它们在里面使用)。 这有时非常方便,可以提高可读性。 首先,你不必在正则表达式中逃避/
本身。
希望这会有帮助。
所有的\\
都是无用的(但无害),所以它相当于s/'/'"'"'/g
。 它取代了字符串中的每个'
with '"'"'
。
这通常用于shell引用。 请参阅https://stackoverflow.com/a/24869016/17389
这个代码的和平取代每个单引号与'"'"'
可以通过删除不必要的反斜杠来简化$ a = ~s /'/“'”'/ g
每一个'我们都会用''''代替
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.