【发布时间】:2010-09-03 01:33:12
【问题描述】:
我有一个字符串,我想在正则表达式中使用它,就像m/$mystring_03/ 但是$mystring 包含导致问题的+s 和斜杠。 Perl 中是否有一种简单的方法来修改$mystring 以确保正确转义所有正则表达式通配符或其他特殊字符? (就像所有的+ 变成了\+)
【问题讨论】:
我有一个字符串,我想在正则表达式中使用它,就像m/$mystring_03/ 但是$mystring 包含导致问题的+s 和斜杠。 Perl 中是否有一种简单的方法来修改$mystring 以确保正确转义所有正则表达式通配符或其他特殊字符? (就像所有的+ 变成了\+)
【问题讨论】:
是的,使用\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";
【讨论】:
quotemeta 函数可以满足您的要求。
【讨论】:
quotemeta 是\Q 和\E 转义的函数接口。
如果您要转义字符串中正则表达式的所有特殊字符,您也可以像使用 rindex 一样
index($_, "$mystring_03")
这将返回要测试的字符串中字符串的索引,如果没有找到匹配项,则返回 -1。
【讨论】:
rindex而不提index?
/(?:full)?name: \Q$name\E/