Как я обрабатываю специальные символы в Perl regex?

Ответ, отправленный @toskv, кажется, что ваш сервис возвращает наблюдаемое, а не наблюдаемое. Вы должны проверить свои типы и apis, чтобы убедиться, что вы правильно интерпретируете ответы.

10
задан martin clayton 6 November 2011 в 12:25
поделиться

3 ответа

Используйте quotemeta:

$pat = quotemeta($arr[1]) . '(.*?)' . quotemeta($arr[2]);
if ($src =~ $pat) 
    print $1;
5
ответ дан 3 December 2019 в 15:22
поделиться

Попробуйте функцию quotemeta Perl. С другой стороны, используйте \Q и \E в Вашем regex для выключения интерполяции значений в regex. См. perlretut для больше на \Q и \E - они не могут быть тем, что Вы ищете.

14
ответ дан 3 December 2019 в 15:22
поделиться

quotemeta выходит из метасимволов, таким образом, они интерпретируются как литералы. Как ярлык, можно использовать \Q...\E в двойном-quotish контексте для окружения материала, который должен быть заключен в кавычки:

$pat = quotemeta($arr[1]).'(.*?)'.quotemeta($arr[2]);
if($src=~$pat) { print $1 }

или

$pat = "\Q$arr[1]\E(.*?)\Q$arr[2]";  # \E not necessary at the end
if($src=~$pat) { print $1 }

или просто

if ( $src =~ /\Q$arr[1]\E(.*?)\Q$arr[2]/ ) { print $1 }

Обратите внимание, что это не ограничено интерполированными переменными; буквенные символы затронуты также:

perl -wle'print "\Q.+?"'
\.\+\?

хотя, очевидно, это происходит после интерполяции переменной, таким образом, "\Q$foo" не становится '\$foo'.

10
ответ дан 3 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: