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

Regex 在Perl中使字符串对正则表达式安全,regex,perl,Regex,Perl,我有一个字符串,我想在正则表达式中使用它,就像m/$mystring_03/但是$mystring包含+s和斜杠,这会导致问题。在Perl中是否有一种简单的方法来修改$mystring,以确保所有正则表达式通配符或其他特殊字符都被正确转义?(就像所有的+都变成了\+)如果你想转义字符串中正则表达式的所有特殊字符,你也可以像这样使用rindex index($_, "$mystring_03") 这将返回要测试的字符串中字符串的索引,或者在未找到匹配项时返回-1。是,请使用: 该函数满足您的要求

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

如果你想转义字符串中正则表达式的所有特殊字符,你也可以像这样使用rindex

index($_, "$mystring_03")
这将返回要测试的字符串中字符串的索引,或者在未找到匹配项时返回-1。

是,请使用:


该函数满足您的要求。

quotemeta
\Q
\E
转义的函数接口。整个正则表达式可能不在字符串中。@Chas。Owens如果整个正则表达式(引用后)不在字符串中,它就不会匹配,是吗?我没有跟随。。。什么时候一个完全引用的正则表达式会给出与子字符串检查不同的结果?为什么提到
rindex
,而不提到
index
?@mobrule没有理由,我编辑它是因为没有理由从末尾开始,尽管AFAICS这在手头的问题上无关紧要。我说的是这样的:
/(?:full)?名称:\Q$name\E/
的可能重复项
#!/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";