假设我想用"橙子"替换"苹果",用"苹果"替换"橙子",我该如何通过Perl的正则表达式实现呢?
以下是我的代码,但运行不成功:
以下是我的代码,但运行不成功:
while (<MYFILE>) {
if (/apple/i) {
s/$&/orange/i;
}
if(/orange/i) {
s/$&/apple/i;
}
}
如果有一种方法可以在 if 函数成功时终止它,并强制返回 while 循环,那么上述代码应该可以工作。但我相信有一个简单的正则表达式方法可以做到这一点。
qr//
引用一个正则表达式。这很方便,因为与正则表达式的相同转义规则适用。如果我使用了普通字符串,那么它将是"\\Q$_\\E"
或者更好的quotemeta($_)
。当您需要预编译或可组合的正则表达式时,qr//
非常方便(它返回一个正则表达式对象)。map
对右侧列表中的每个项目应用操作。然后它返回转换后的项。当前项在$_
中。 - amonqr//
的作用是将字符串编译为正则表达式。但在这里你把它转回字符串后,又将其作为参数传给join函数,这样做没有任何意义。更好的写法是my $re = join '|', map quotemeta($_), keys %replacement
。 - Borodin$&
不会减慢匹配速度,它只是将捕获的成本添加到程序中的所有模式中,即使它们不使用捕获。 - ikegami