我有以下字符串:
猫狗狐狸catepillar熊狡猾
我需要更换“猫”和“狐狸”从这句话中,以“动物”字的话
我做到以下几点:
$Str1="cat";
$Str2="fox";
$NewStr="animal";
open(F1, "<$inputFile") or die "Error: $!";
open(F2, ">$outputFile") or die "Error: $!";
while ($line = <F1>) {
$line =~ s/$Str1|$Str2/NewStr/g;
print F2 "$line";
}
但问题是Word的“catepillar”和“狡猾”部分(“猫”和FOX)也将被替换。 如何更换唯一的一句话“猫”和“狐狸精”?
这里有一对夫妇更多的问题。
# First, always use strict and warnings
# This will save you tons
use warnings;
use strict;
# declare your vars with 'my' for lexical scope
my $inputFile = "somefile";
my $outputFile = "someotherfile";
my $Str1="cat";
my $Str2="fox";
my $NewStr="animal";
# use 3-arg lexically scoped open
open(my $F1, "<", $inputFile) or die "Error: $!";
open(my $F2, ">", $outputFile) or die "Error: $!";
while (my $line = <$F1>) {
# surround with word boundary '\b'
# NewStr is missing the "$"
$line =~ s/\b(?:$Str1|$Str2)\b/$NewStr/g;
# UPDATED
# this should work to remove the parens
$line =~ s/(\($NewStr\))/$NewStr/g;
print $F2 "$line";
}
# close your file handles
close $F1;
close $F2;
$line =~ s/\b(?:$Str1|$Str2)\b/$NewStr/g;
什么变化意味着:
\b
为一个字边界零宽度断言
(?:
启动组,但不使用它捕捉,只是分组
用一个字边界断言建立自己的正则表达式。 你可以找到关于它的信息http://perldoc.perl.org/perlre.html 。