在Perl中使正则表达式的字符串安全

时间:2010-09-02 16:40:41

标签: regex perl

我有一个字符串,我希望在正则表达式中使用它,就像m/$mystring_03/一样,但是$mystring包含导致问题的+ s和斜杠。在Perl中是否有一种简单的方法来修改$mystring以确保所有正则表达式通配符或其他特殊字符都被正确转义? (就像所有+变成\+

一样

3 个答案:

答案 0 :(得分:13)

是的,请使用\Q and \E escapes

#!/usr/bin/perl

use strict;
use warnings;

my $text = "a+";

print
    $text =~ /^$text$/     ? "matched" : "didn't match", "\n",
    $text =~ /^\Q$text\E$/ ? "matched" : "didn't match", "\n";

答案 1 :(得分:10)

quotemeta函数可以满足您的要求。

答案 2 :(得分:1)

如果您要转义字符串中正则表达式的所有特殊字符,您也可以使用rindex

index($_, "$mystring_03")

返回要测试的字符串中字符串的索引;如果未找到匹配项,则返回-1。