Перейти к основному содержимому
Модуль 1 · Урок 3 из 43/32 в курсе~8 min
Уроки модуля (3/4)

Подстановочный знак: точка `.`

Точка . в регулярном выражении является подстановочным знаком: она соответствует любому одиночному символ\u2026 за одним важным исключением: он НЕ соответствует новая строка (\n).

Code
Pattern: c.t
Sample:  cat cot cut c@t c\nt
         ^^^ ^^^ ^^^ ^^^

Три буквы: c, любой символ, t. Между ними нет новой строки, поэтому c\nt не совпадает (по умолчанию).

Точка чрезвычайно полезна, но и опасна: использовать ее без дисциплины. захватывает больше, чем вы планировали. В сочетании с кванторами в модуле 2 (.*, .+?) это источник 90% шаблонов, которые «работают не так, как я ожидаемо».

Флаг s: «dotAll»

С флагом s (также называемым dotAll или single-line) точка соответствует каждый символ, включая новую строку. Полезно для извлечения блоков, охватывающих несколько строк.

Code
Pattern: <p>.*</p>
Flag:    gs
Sample:  <p>prima\nseconda</p>
         ^^^^^^^^^^^^^^^^^^^^^

Ограничения и поведение подстановочного знака точки

Точка . является мощным подстановочным знаком, но по умолчанию она не соответствует символам новой строки (\\n). Если вы хотите, чтобы точка соответствовала абсолютно всему, включая символы новой строки, необходимо включить флаг s (dotAll). Будьте осторожны при объединении точки с квантификаторами (.*), так как она имеет тенденцию потреблять слишком много текста (жадное поведение).

Попробуйте это

Упражнение#regex.m1.l3.e1
Попыток: 0Загрузка…

Найдите каждую тройку символов, разделенную круглыми скобками, например. `(abc)`, `(xyz)`. Используйте подстановочный знак для трех внутренних символов.

Загрузка редактора…
Показать подсказку

Три точки для трех произвольных символов. Круглые скобки являются метасимволами: их необходимо экранировать с помощью \\.

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#regex.m1.l3.e2
Попыток: 0Загрузка…

Извлеките блок между `[INIZIO]` и `[FINE]`, который может занимать несколько строк. Вам понадобится флаг `s`, чтобы точка также соответствовала символу новой строки, и «ленивая» версия квантификатора (`.*?`, модуль 2).

Загрузка редактора…
Показать подсказку

Без флага s точка останавливается в конце строки: добавьте ее. Форма .*? (ленивый) останавливает матч при первом [FINE].

Решение доступно после 3 попыток

Дополнительная задача

Упражнение#regex.m1.l3.e3
Попыток: 0Загрузка…

Find all 3-character sequences starting with `c` and ending with `t` (e.g. `cat`, `cot`, `c-t`).

Загрузка редактора…
Показать подсказку

В шаблоне используется точка '.' для представления среднего символа подстановочного знака.

Решение доступно после 3 попыток