Россия и Беларусь начали и продолжают войну против народа Украины!

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

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

  Обновл. 16 Сен 2021  | 

 16457

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

Метасимволы

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

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

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

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

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

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

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

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

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

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

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

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


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

   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 — соответствует символу табуляции;

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

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

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

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

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

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

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


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

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

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

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