Перейти до основного вмісту
Модуль 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 (точкаВсе). Будьте обережні, поєднуючи крапку з квантифікаторами (.*), оскільки це має тенденцію споживати занадто багато тексту (жадібна поведінка).

Спробуйте

вправи#regex.m1.l3.e1
Спроби: 0Завантаження…

Знайти кожну трійку символів, розділених дужками, напр. "(abc)", "(xyz)". Використовуйте символ підстановки для 3 внутрішніх символів.

Завантаження редактора…
Показати підказку

Три крапки для трьох довільних символів. Дужки є метасимволами: їх потрібно екранувати за допомогою \\.

Рішення доступне після 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 спроб