Цитирование метасимволов
Метасимволы в управляющих последовательностях Perl являются буквенно - цифровыми, такими , как \b
, \w
,
\n
. В отличие от некоторых других языков регулярных выражений, здесь нет символов обратной косой черты, которые не являются буквенно-цифровыми. Поэтому все , что выглядит как \\
, \(
, \)
, \[
, \]
, \{
, или \}
всегда интерпретируется как буквенный символ, а не метасимволы. Когда-то это использовалось в общей идиоме, чтобы отключить или заключить в кавычки специальные значения метасимволов регулярных выражений в строке, которую вы хотите использовать для шаблона. Просто процитируйте все не «слова» символы:
$pattern =~ s/(\W)/\\$1/g;
(Если use locale
установлено, то это зависит от текущей локали.) Сегодня более распространено использовать quotemeta
функцию или \Q
escape-последовательность мета-цитирования, чтобы отключить специальные значения всех метасимволов, например:
/$unquoted\Q$quoted\E$unquoted/
Имейте в виду, что если вы поместите буквенные обратные слэши (те, которые не входят в интерполированные переменные) между \Q
и \E
, двойная квотированная обратная косая черта может привести к путанным результатам. Если вам нужно использовать обратную косую черту внутри \Q...\E
, проконсультируйтесь с «Gory details of синтаксический анализ цитируемых конструкций» в perlop .
quotemeta
и \Q
полностью описаны в цитате .
grep '^$1'
? Или вы не имели в виду, что хотите предотвратить$1
расширение оболочки?