<MyRusakov.ru />

Создание игр на Unreal Engine 5

Создание игр на Unreal Engine 5

Данный курс научит Вас созданию игр на Unreal Engine 5. Курс состоит из 12 модулей, в которых Вы с нуля освоите этот движок и сможете создавать самые разные игры.

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

Помимо самого курса Вас ждёт ещё 8 бесплатных ценных Бонусов: «Chaos Destruction», «Разработка 2D-игры», «Динамическая смена дня и ночи», «Создание динамической погоды», «Создание искусственного интеллекта для NPC», «Создание игры под мобильные устройства», «Создание прототипа RPG с открытым миром» и и весь курс «Создание игр на Unreal Engine 4» (актуальный и в 5-й версии), включающий в себя ещё десятки часов видеоуроков.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Регулярные выражения в PHP: preg_match, preg_replace и понятные примеры

Регулярные выражения в PHP: preg_match, preg_replace и понятные примеры

Если вы ищете простое и практичное руководство по запросу «регулярные выражения в PHP», вы по адресу. Разберём ключевые функции PCRE: preg_match, preg_replace и preg_split, посмотрим на модификаторы, Unicode, жадность и оптимизацию. В конце — чек‑лист лучших практик и отладка ошибок.

Что такое регулярные выражения в PHP

Регулярное выражение (regex) — это шаблон для поиска и обработки текста. В PHP используется движок PCRE (Perl-Compatible Regular Expressions), а функции начинаются с preg_*.

Быстрый старт: preg_match

preg_match проверяет, соответствует ли строка шаблону, и может вернуть совпадения.

<?php
$pattern = '/^hello,\s*(?[\p{L} -]{2,})$/u';
$text    = 'hello, Иван Петров';

if (preg_match($pattern, $text, $m)) {
    echo "Привет, {$m['name']}!"; // Привет, Иван Петров!
}

Здесь:

  • ^ и $ — якоря начала и конца строки;
  • \p{L} — любая буква Юникода (важен модификатор u);
  • именованная группа (?<name>...) делает код понятнее.

Все вхождения: preg_match_all

<?php
$text = 'Хештеги: #php #regex #примеры';
$pattern = '/#(\w+)/u';
preg_match_all($pattern, $text, $m);
print_r($m[1]); // [php, regex, примеры]

Замена: preg_replace

Частая задача — нормализовать данные. Например, очистим телефон до цифр и приведём к формату 7XXXXXXXXXX.

<?php
$raw = '+7 (999) 123-45-67';
$digits = preg_replace('/\D+/', '', $raw);     // 79991234567
$digits = preg_replace('/^8/', '7', $digits);   // замена ведущей 8 на 7
$normalized = '7' . substr($digits, -10);       // 7 + последние 10 цифр
echo $normalized; // 79991234567

Пример с группами и подстановками:

<?php
$text = 'Файл: report_2025-01-13.pdf';
$pattern = '/(?<year\d{4})-(?<month\d{2})-(?<day\d{2})/'; // опечатка исправим ниже

Будьте внимательны: именованные группы пишутся так (?<year>\d{4}). Правильный вариант:

<?php
$pattern = '/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/';
$replaced = preg_replace($pattern, '${day}.${month}.${year}', $text);
echo $replaced; // Файл: report_13.01.2025.pdf

Разбиение строки: preg_split

<?php
$line = "яблоко, груша; слива\tперсик  абрикос";
$parts = preg_split('/[\s,;]+/u', $line, -1, PREG_SPLIT_NO_EMPTY);
print_r($parts); // [яблоко, груша, слива, персик, абрикос]

Модификаторы: u, i, m, s, x

  • u — включить Unicode. Почти всегда используйте его для русского текста;
  • i — регистронезависимый поиск;
  • m — многострочный режим (^ и $ видят границы строк);
  • s — делает жадным по отношению к переносам строк;
  • x — позволяет писать шаблон с пробелами и комментариями.
<?php
$pattern = '/^привет$/miu';
$text = "Привет\nпривет\nПРИВЕТ";
preg_match_all($pattern, $text, $m);
print_r($m[0]); // [привет, ПРИВЕТ]

Жадность и ленивость квантификаторов

По умолчанию квантификаторы жадные. Добавьте ?, чтобы сделать их ленивыми.

<?php
$text = '<b>one<\/b><b>two<\/b>';
preg_match_all('/<b>.*<\/b>/', $text, $greedy);
preg_match_all('/<b>.*?<\/b>/', $text, $lazy);
print_r($greedy[0]); // ['<b>one<\/b><b>two<\/b>']
print_r($lazy[0]);   // ['<b>one<\/b>', '<b>two<\/b>']

Именованные группы и просмотр вперёд

<?php
$pattern = '/^(?=.{8,})(?=.*[A-Z])(?=.*\d)[A-Za-z\d]+$/';
$ok = preg_match($pattern, 'Php2025');     // 0 — нет заглавной буквы и длины недостаточно
$ok = preg_match($pattern, 'StrongPass1'); // 1 — соответствует

Здесь «заглядывания» (?=...) проверяют условия без потребления символов.

Производительность и безопасность

  • Ограничивайте длину обрабатываемого ввода (например, перед regex режьте до разумной длины).
  • Избегайте шаблонов с катастрофическим бэктрекингом, например /(a+)+$/ на длинных строках.
  • При необходимости повышайте лимиты PCRE и проверяйте ошибки.
<?php
ini_set('pcre.backtrack_limit', '1000000');
ini_set('pcre.recursion_limit', '100000');

$subject = str_repeat('a', 100000);
preg_match('/(a+)+$/', $subject);

switch (preg_last_error()) {
    case PREG_BACKTRACK_LIMIT_ERROR:
        echo 'Превышен backtrack_limit';
        break;
    case PREG_RECURSION_LIMIT_ERROR:
        echo 'Превышен recursion_limit';
        break;
    case PREG_NO_ERROR:
        echo 'Ошибок нет';
}

Для оптимизации используйте «жадные» приёмы безопасно: позитивные квантификаторы (\d++) и атомарные группы (?>...) уменьшают бэктрекинг.

<?php
$ok = preg_match('/\d++[a-z]/i', '1234A');   // быстрее, чем /\d+[a-z]/
$ok = preg_match('/(?>\d+)[a-z]/i', '1234A'); // атомарная группа

Типичные ошибки и отладка

  • Забыли модификатор u для русского текста — классы вроде \w и \.\* ведут себя странно.
  • Неэкранированные разделители — если используете / в шаблоне, экранируйте <\/b> или выберите другой разделитель, например #...#.
  • Сложные паттерны без комментариев — включите x и документируйте.
<?php
$pattern = '# ^ (?<user>[\p{L}0-9_.-]{3,16}) @ (?<host>[\p{L}0-9.-]+\.[a-z]{2,}) $ #ixu';
$emailLike = 'user.name@пример.рф';
var_dump((bool)preg_match($pattern, $emailLike));

Небольшая шпаргалка рецептов

  • Только цифры: /^\d+$/
  • UUID v4: /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i
  • Вытащить все URL: '~https?:\/\/[\w.-]+(?:\/[\w\-._~:?#\[\]@!$&'()*+,;=]*)?~iu'
  • Slug из строки: замените всё, кроме букв/цифр и дефиса, а затем сожмите дефисы:
    <?php
    $title = 'Лучшие практики PHP: Регулярки и Unicode!';
    $slug = mb_strtolower($title);
    $slug = preg_replace('/[^\p{L}\p{Nd}]+/u', '-', $slug);
    $slug = trim(preg_replace('/-+/', '-', $slug), '-');
    echo $slug; // luchshie-praktiki-php-regulyarki-i-unicode
    

Как быстро тестировать шаблоны

Можно писать мини‑скрипт или даже однострочник через CLI:

php -r "var_export(preg_match('/^\d+$/', '12345'));"

Итоги

Теперь вы знаете, как использовать регулярные выражения в PHP для поиска, проверки и преобразования строк: preg_match и preg_match_all для поиска, preg_replace для замены и preg_split для разбиения. Обращайте внимание на модификаторы (u,i,m,s,x), контролируйте жадность квантификаторов и следите за производительностью.

Хотите системно прокачать PHP и базу данных на проектах «с нуля до продакшена»? Посмотрите программу и запишитесь на практический курс «PHP и MySQL с Нуля до Гуру 3.0» — отличный способ закрепить знания о регулярках и не только.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.