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

Отрицание: `[^...]`

Размещение курсора ^ в качестве первого символа внутри скобок. инвертирует класс: он соответствует любому символу, кроме перечисленных.

Code
Pattern: [^aeiou]
Sample:  ciao mondo
          ^   ^^  ^

[^aeiou] соответствует согласным, пробелам, знакам препинания, цифрам\u2026 всему, что не гласная.

Типичные примеры

  • [^\s] -- любой символ, не являющийся пробелом (эквивалент \S).
  • [^0-9] -- все, что не является цифрой (эквивалент \D).
  • [^"]+ -- "последовательность символов, не являющихся двойными кавычками" (полезно для извлечь содержимое между кавычками).
Code
Pattern: "([^"]+)"
Sample:  Il libro "Il nome della rosa" e' famoso.

Группа ([^"]+) фиксирует все, что находится между кавычками остановка перед следующим ": это классический трюк, позволяющий избежать Проблема жадности и ленивости.

Отрицание и альтернативные подстановочные знаки

Инвертированный класс [^...] использует ровно один символ, НЕ входящий в указанный набор. Это мощный инструмент, позволяющий предотвратить выход движка за критические разделители и избежать ReDoS, вызванного бесконечными циклами возврата.

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

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

Извлеките содержимое каждой строки, заключенной в двойные кавычки, не захватывая сами кавычки.

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

Замените .+ на [^"]+: таким образом совпадение остановится на следующей кавычке.

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

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

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

Найдите каждое слово, состоящее ТОЛЬКО из согласных (без гласных, без цифр и символов).

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

Внутри скобок вы можете комбинировать отрицание гласных с \\W (не слово) и \\d (цифры).

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

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

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

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

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

Используйте [^\\s,] с квантором +.

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