Как мне избежать специальных символов в строке, которую я интерполирую в регулярное выражение Perl? - PullRequest
12 голосов
/ 28 января 2010

У меня есть строка, которая может содержать специальные символы, такие как: $, (, @, #, и т. Д. Мне нужно иметь возможность выполнять регулярные выражения для этой строки.

Прямо сейчас, если в моей строке есть какой-либо из этих символов, регулярное выражение кажется нарушенным, поскольку это зарезервированные символы для регулярного выражения.

Кто-нибудь знает хорошую подпрограмму, которая будет прекрасно использовать любой из этих символов для меня, чтобы потом я мог сделать что-то вроде:

 $p_id =~ /^$key/

Ответы [ 2 ]

22 голосов
/ 28 января 2010
$p_id =~ /^\Q$key\E/;
6 голосов
/ 28 января 2010

Судя по твоему описанию, это звучит так, будто у тебя это задом наперед. Вам не нужно экранировать символы в строке, с которой вы подходите ($ p_id), вам нужно экранировать строку соответствия '^ $ key'.

Дано:

$p_id = '$key$^%*&#@^&%$blah!!';

Использование:

$p_id =~ /^\$key/;

или

$p_id =~ /^\Q$key\E/;

Пара \ Q, \ E рассматривает все промежуточное как буквальное. Другими словами, вы не хотите искать содержимое переменной $ key, но фактическую строку '$ key'. Первый пример просто избегает $.

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