Подтвердить что ты не робот

Регулярное выражение Perl (с использованием переменной в качестве строки поиска с включенными символами оператора perl)

$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///?

4b9b3361

Ответ 1

Используйте \Q для автоматического удаления любых потенциально проблемных символов в вашей переменной.

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

Ответ 2

Используйте функцию quotemeta:

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

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

Ответ 3

Как уже писали ребята, вы можете использовать quotemeta (\Q \E), если ваш Perl 5.16+, но если ниже вы можете просто не использовать regexp вообще.

например, с помощью команды index

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