Метасимволы и якоря в регулярных выражениях

  Владислав Титов  | 

  Обновл. 17 Ноя 2019  | 

 1593

Теперь, когда у вас есть базовое представление о регулярных выражениях, мы можем двигаться уже к более сложным вещам.

Метасимволы

В предыдущем уроке мы рассматривали оператор диапазона ([]). Это позволило нам указывать набор искомых символов (диапазон). Есть некоторые диапазоны символов, которые используются очень часто, поэтому для них был создан набор метасимволов. Для доступа к ним используется бэкслеш \, за которым следует необходимая буква. (В этом случае экранирующий символ вводит особое значение, а не убирает его.)

   \s — соответствует всему, что считается пробелом (например: пробел, табуляция, разрыв строки и т.д.);

   \S — является противоположностью \s и соответствует любым символам, которые не являются пробелами;

   \d — соответствует любым цифрам, например, от 0 до 9 (по сути, это сокращение для [0-9]);

   \D — является противоположностью \d и соответствует любым символам, которые не являются цифрами;

   \w — соответствует любому строковому символу: [A-Za-z0-9_]. Обратите внимание на символ подчёркивания _, он часто используется в именах переменных/функций.

   \W — является противоположностью \w и соответствует любым символам, которые не являются строковыми символами.

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

Сокращения выше соответствуют одному символу, но, с помощью мультипликаторов, мы можем увеличить количество соответствующих символов. Например, если мы хотим найти какие-либо суммы в долларах, содержащие четыре цифры, мы можем создать следующее регулярное выражение:

Регулярное выражение: \$\d{4}
Пример: Today I earned $58327 but lost $3826.

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

Непечатаемые символы


Помимо наших обычных символов, есть несколько других символов, которые мы, на самом деле, не видим, но которые помогают нам в форматировании нашего текста:

   tab — представлен в регулярных выражениях как \t;

   возврат каретки — представлен в регулярных выражениях как \r;

   перевод строки (или ещё «символ новой строки» или «разрыв строки«) — представлен в регулярных выражениях как \n.

С символом табуляции вы должны быть знакомы (это удлинённый пробел). Концепции символов возврата каретки и новой строки появились на механических пишущих машинках. Функция возврата каретки перемещает курсор из конца строки в её начало. Перевод строки означает перемещение курсора из текущей строки на новую.

В зависимости от используемой вами ОС, эти символы или их комбинации могут использоваться для обозначения новой строки:

   Windows — используется последовательность \r\n;

   Mac OS (версия 9 и ниже) — используется последовательность \r;

   Unix/Linux — используется последовательность \n.

К счастью, с помощью регулярных выражений мы можем создать шаблон, который будет идентифицировать новую строку независимо от того, из какой ОС поступили данные. Однако для этого нам нужно использовать некоторые функции, которые будут представлены в следующем уроке.

Примечание: \n и \r присутствуют в одних реализациях регулярных выражений, но отсутствуют в других. Если вы столкнулись с каким-то непонятным поведением регулярных выражений, то, возможно, причиной этому является то, что эти сокращения не реализованы корректным образом в используемом вами инструменте.

Якоря

При определении новых строк, мы всегда можем ссылаться на 2 конкретных местоположения в строке — это начало и конец строки:

   ^ (символ каретки) — представляет начало строки;

   $ (символ доллара) — представляет конец строки.

Важно точно понимать, что они представляют.

В строке выше люди обычно говорят, что буква «В» в слове «Важно» и точка в конце обозначают начало и конец строки. Это, на самом деле, неверно (по отношению к регулярным выражениям). Начало строки — это символ нулевой ширины, который находится непосредственно перед «В», а конец строки — это символ нулевой ширины, который находится сразу после точки. Под «нулевой шириной» мы подразумеваем, что при написании эти символы не отображаются. Они есть, но мы не можем их видеть.

Эти две позиции в строке называются якорями, поскольку они позволяют нам привязать шаблон регулярного выражения к конкретной точке в строке.

Допустим, мы хотим найти число, но, при условии, что оно является самым первым элементом в строке:

Регулярное выражение: ^\d+
Пример: 13 cats escaped from the 5 cages at the vet's clinic.

Совместное использование символов начала и конца строки может быть использовано для поиска чего-то уникального в строке. Например, мы хотим найти строки, которые содержат только одно слово, которое может быть либо bat, либо bit, либо but:

Регулярное выражение: ^b[aiu]t$
Пример (строка №1): This line does not match but the next line does.
Пример (строка №2): bat

Границы слова


Границы слова являются примером другого символа нулевой ширины, часто используемого в регулярных выражениях. Граница слова — это самое начало или конец слова. Оно может быть идентифицировано с использованием следующего:

   \< — представляет начало слова.

   \> — представляет конец слова.

   \b — представляет либо начало, либо конец слова.

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

Слово — это строка, которая состоит из символов, которые включает в себя \w (т.е. A-Z, a-z, 0-9 и _). Обратите внимание, знаки препинания, такие как апостроф ('), не входят в это определение:

Регулярное выражение: \bt\w+\b
Пример: Now that's the truth and you know it.

Заключение

Резюмируем то, что мы узнали:

   \s — соответствует любому пробельному символу (пробел, символ табуляции, символ новой строки и т.д.);

   \S — соответствует любому символу, который не относится к пробельным;

   \d — соответствует любому символу, который является цифрой (0–9);

   \D — соответствует любому символу, который не является цифрой;

   \w — соответствует любому символу, который является строковым символом (A-Z, a-z, 0-9 и _);

   \W — соответствует любому символу, который не является строковым символом;

   \t — соответствует символу табуляции (tab);

   \r — соответствует символу возврата каретки;

   \n — соответствует символу новой строки;

   ^ — якорь, который обозначает начало строки;

   $ — якорь, который обозначает конец строки;

   \b — соответствует началу или концу слова.

   \< — соответствует началу слова.

   \> — соответствует концу слова.


Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (10 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *