Ответ 1
$p_id =~ /^\Q$key\E/;
У меня есть строка, которая может содержать специальные символы, такие как: $
, (
, @
, #,
и т.д.
Мне нужно иметь возможность выполнять регулярные выражения в этой строке.
Прямо сейчас, если в моей строке есть любой из этих символов, регулярное выражение, похоже, сломается, поскольку это зарезервированные символы для регулярного выражения.
Кто-нибудь знает хорошую подпрограмму, которая могла бы с легкостью избежать любого из этих символов для меня, чтобы позже я мог сделать что-то вроде:
$p_id =~ /^$key/
$p_id =~ /^\Q$key\E/;
Из вашего описания это звучит так, будто у вас есть это назад. Вам не нужно избегать символов в строке, которую вы сопоставляете ($ p_id), вам нужно избежать строки соответствия "^ $key".
Дано:
$p_id = '$key$^%*&#@^&%$blah!!';
Использование:
$p_id =~ /^\$key/;
или
$p_id =~ /^\Q$key\E/;
Пара\Q,\E обрабатывает все, что находится между буквами. Другими словами, вы не хотите искать содержимое переменной $key, но фактическую строку "$ key". Первый пример просто ускользает от $.