it-swarm.dev

Perl正则表达式(使用包含Perl运算符字符的变量作为搜索字符串)

$text_to_search = "example text with [foo] and more";
$search_string = "[foo]";

if ($text_to_search =~ m/$search_string/)
    print "wee";

请遵守以上代码。出于某种原因,我想在$ text_to_search变量中找到文本“[foo]”,如果找到它则打印“wee”。要做到这一点,我必须确保[和]被[和]替换,以使Perl将其视为字符而不是运算符。

如何在不必先使用[]使用\[表达式替换\]s///的情况下执行此操作?

51
Stefan

使用\Q可以自动显示变量中任何可能存在问题的字符。

if($text_to_search =~ m/\Q$search_string/) print "wee";
61
Dave Cross

使用 quotemeta function:

$text_to_search = "example text with [foo] and more";
$search_string = quotemeta "[foo]";

print "wee" if ($text_to_search =~ /$search_string/);
46
Platinum Azure

如果你的Perl是5.16或更高版本,你可以使用quotemeta (\Q \E),但是如果你在下面你可以完全避免使用正则表达式。

例如,通过使用index命令:

if (index($text_to_search, $search_string) > -1) {
    print "wee";
}
18
Boris Ivanov