Ответ 1
Используйте \Q
для автоматического удаления любых потенциально проблемных символов в вашей переменной.
if($text_to_search =~ m/\Q$search_string/) print "wee";
$text_to_search = "example text with [foo] and more";
$search_string = "[foo]";
if($text_to_search =~ m/$search_string/) print "wee";
Пожалуйста, соблюдайте приведенный выше код. По какой-то причине я хотел бы найти текст "[foo]" в переменной $text_to_search и напечатать "wee", если найду его. Для этого я должен был бы убедиться, что [и] заменен [и], чтобы Perl рассматривал его как символы вместо операторов.
Вопрос: Как мне это сделать без необходимости сначала заменять [
и ]
на \[
и \]
с помощью выражения s///
?
Используйте \Q
для автоматического удаления любых потенциально проблемных символов в вашей переменной.
if($text_to_search =~ m/\Q$search_string/) print "wee";
Используйте функцию quotemeta
:
$text_to_search = "example text with [foo] and more";
$search_string = quotemeta "[foo]";
print "wee" if ($text_to_search =~ /$search_string/);
Как уже писали ребята, вы можете использовать quotemeta (\Q \E)
, если ваш Perl 5.16+, но если ниже
вы можете просто не использовать regexp вообще.
например, с помощью команды index
if (index($text_to_search, $search_string) > -1){
print "wee";
}