使用perl替换命令替换带有反斜杠的文本

时间:2016-02-10 21:02:43

标签: regex perl backslash

所以我正在研究一个在输入上执行替换命令的perl脚本,输入将有反斜杠。所以只需用新文本替换一些文本

例如,如果输入是

"\text"

我可能会输出

"newText"

请注意删除斜杠。

以下是一些代码:

$oldText = "\\Text";

while (<STDIN>) {                
    $ln = $_;                     
    $ln2 = $_;
    $ln2 =~ s/\\Text/newText/;  
    $ln =~ s/$oldText/newText/;
}
print "$ln\n";
print "$ln2\n";

当输入为&#34; Text&#34;输出是

\newText #Incorrect because the \ is still there

newText #Correct

任何人都可以解释为什么使用字符串而不是变量将输出更改为我想要的?我知道\ derefences下面的字符,这可能是问题的根源。但我无法理解为什么使用变量会改变输出。将变量oldText更改为&#34; \ text&#34;不会改变输出。

1 个答案:

答案 0 :(得分:4)

使用warnings会告诉你:

Unrecognized escape \T passed through in regex; marked by <-- HERE in m/\T <-- HERE ext/ at ...

$oldText = "\\Text"将字符串\Text分配给$ oldText,因此这两个替换不相等。使用\Q(请参阅quotemeta)引用变量的内容:

$ln =~ s/\Q$oldText/newText/;