繁体   English   中英

perl正则表达式替代

[英]perl regular expressions substitue

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

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

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

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

表达式$str =~ s/pattern/replacement/是一个正则表达式 ,用“替换”替换了由“pattern”匹配的字符串$str的一部分。 最后用/g对字符串中的“模式”的所有实例都这样做。 远远不止于此 - 请参阅教程快速 入门参考资料以及perlreperlop中的完整信息。

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

事实上,这些实际上并不需要被转义。 这样可行

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM