Что такое регулярное выражение (RegEx) и для чего оно используется?

Ответ

Регулярное выражение (RegEx) — это специальная текстовая строка, описывающая шаблон поиска в тексте. Это мощный инструмент для поиска, замены и валидации строк.

Основные элементы синтаксиса:

  • d — Любая цифра.
  • w — Буквенно-цифровой символ или подчеркивание.
  • [a-z] — Диапазон символов (от a до z).
  • + — Одно или более повторений предыдущего элемента.
  • * — Ноль или более повторений.
  • ^ и $ — Начало и конец строки соответственно.
  • (a|b) — Альтернатива (a или b).

Пример в Swift (поиск чисел в строке):

let text = "Заказ №12345 на сумму 99.99$"
let pattern = #"d+(.d+)?"# // Ищет целые и дробные числа

if let regex = try? NSRegularExpression(pattern: pattern) {
    let matches = regex.matches(in: text, range: NSRange(text.startIndex..., in: text))
    for match in matches {
        if let range = Range(match.range, in: text) {
            print("Найдено: (text[range])") // 12345, 99.99
        }
    }
}

Типичное применение:

  1. Валидация: Email, телефоны, пароли.
  2. Парсинг: Извлечение данных из логов или неструктурированного текста.
  3. Поиск и замена: Сложные текстовые операции в редакторах кода.

Ответ 18+ 🔞

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

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

  • d — Цифра, одна любая. Просто цифра, блядь.
  • w — Буква, цифра или эта подчеркивающая палочка. Буквенно-цифровой, короче.
  • [a-z] — Диапазон, вот это вот от a до z. Можно и [0-9], и [а-я], если надо.
  • + — Значит, предыдущая хрень должна быть одна или больше. Жадный символ, сука.
  • * — А это ноль или больше. То есть может и вообще не быть, и это норма.
  • ^ и $ — Начало строки и конец строки. Чтобы привязать шаблон к краям, а не искать где попало.
  • (a|b) — Либо a, либо b. Альтернатива, выбор, понимаешь?

Вот тебе живой пример на Swift (чтобы найти все числа в строке):

let text = "Заказ №12345 на сумму 99.99$"
let pattern = #"d+(.d+)?"# // Ищет и целые, и дробные числа, типа 99.99

if let regex = try? NSRegularExpression(pattern: pattern) {
    let matches = regex.matches(in: text, range: NSRange(text.startIndex..., in: text))
    for match in matches {
        if let range = Range(match.range, in: text) {
            print("Найдено: (text[range])") // Выведет: 12345, 99.99
        }
    }
}

А применяется эта магия вот где, обычно:

  1. Валидация, ёпта: Проверить, что email не кривой, телефон похож на телефон, а пароль не совсем уж говно.
  2. Парсинг: Вытащить данные из какого-нибудь лога или текстового файла, где всё в кучу набросано.
  3. Поиск и замена: В продвинутых редакторах кода — чтобы не менять всё вручную, а сделать разом по хитрому правилу. Просто овердохуища полезная вещь, если разобраться.