Создание безопасных строк для регулярных выражений в Perl - PullRequest
2 голосов
/ 02 сентября 2010

У меня есть строка, которую я хочу использовать в регулярном выражении, например, m/$mystring_03/, однако $mystring содержит + s и косые черты, которые вызывают проблемы.Есть ли в Perl простой способ изменить $mystring, чтобы обеспечить правильное экранирование всех подстановочных знаков регулярного выражения или других специальных символов?(как и все + превратилось в \+)

Ответы [ 3 ]

13 голосов
/ 02 сентября 2010

Да, используйте \Q и \E escape :

#!/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";
10 голосов
/ 02 сентября 2010

Функция quotemeta делает то, что вы просите.

1 голос
/ 02 сентября 2010

Если вы собираетесь экранировать все специальные символы для регулярных выражений в строке, вы также можете использовать rindex, например

index($_, "$mystring_03")

возвращает индекс строки в строке, которую вы хотите проверить, или -1, если совпадение не найдено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...