PHP Регулярні Вирази: Повний Посібник з Кодом та FAQ

Автор Nuygo, Квт. 15, 2025, 01:12 PM

« попередня та - наступна тема »

Nuygo


Регулярні вирази (regex) у PHP є потужним інструментом для пошуку, перевірки та маніпуляції текстом. Вони дозволяють знаходити шаблони в рядках, перевіряти введені дані, замінювати текст тощо. У цій статті ми розглянемо основи використання регулярних виразів у PHP, надамо приклади коду та відповімо на найпоширеніші запитання.

Основи регулярних виразів у PHP
PHP підтримує регулярні вирази через функції preg_*, такі як preg_match(), preg_replace() та preg_split(). Регулярні вирази в PHP зазвичай використовують синтаксис Perl (PCRE — Perl Compatible Regular Expressions).
Основні елементи регулярних виразів:

  • Літерали: Звичайні символи, наприклад, a, 1, які відповідають самим собі.
  • Метасимволи: Символи, такі як . (будь-який символ), * (нуль або більше повторень), + (одне або більше повторень).
  • Класи символів: Наприклад, [a-z] (будь-яка мала літера), [0-9] (будь-яка цифра).
  • Межі: Наприклад, ^ (початок рядка), $ (кінець рядка).
  • Групи: Використовуються з дужками (), наприклад, (abc).

Функції PHP для роботи з регулярними виразами
  • preg_match($pattern, $subject, $matches): Шукає збіги в рядку та повертає 1, якщо знайдено, або 0, якщо ні.
  • preg_match_all($pattern, $subject, $matches): Знаходить усі збіги в рядку.
  • preg_replace($pattern, $replacement, $subject): Замінює збіги в рядку на вказаний текст.
  • preg_split($pattern, $subject): Розбиває рядок за шаблоном.

Приклади коду
1. Перевірка правильності email-адреси
<?php
$email 
"[email protected]";
$pattern "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";

if (
preg_match($pattern$email)) {
    echo 
"Email правильний!";
} else {
    echo 
"Неправильний email.";
}
?>

Пояснення шаблону:
  • ^ — початок рядка.
  • [a-zA-Z0-9._%+-]+ — один або більше символів (літери, цифри, крапка, дефіс тощо).
  • @ — символ "@".
  • [a-zA-Z0-9.-]+ — домен (літери, цифри, дефіс, крапка).
  • \. — крапка перед доменним ім'ям (наприклад, .com).
  • [a-zA-Z]{2,} — домен верхнього рівня (2 або більше літер).
  • $ — кінець рядка.

2. Заміна всіх чисел у тексті
<?php
$text 
"Мені 25 років, а моєму другу 30.";
$pattern "/\d+/";
$result preg_replace($pattern"[ЧИСЛО]"$text);

echo 
$result// Виведе: Мені [ЧИСЛО] років, а моєму другу [ЧИСЛО].
?>

Пояснення:
  • \d+ — відповідає одному або більше цифр.
  • preg_replace() замінює всі знайдені числа на "[ЧИСЛО]".

3. Розбиття рядка на слова
<?php
$text 
"Це приклад тексту, з комами!";
$pattern "/[\s,]+/";
$words preg_split($pattern$text);

print_r($words);
/* Виведе:
Array
(
    [0] => Це
    [1] => приклад
    [2] => тексту
    [3] => з
    [4] => комами!
)
*/
?>

Пояснення:
  • [\s,]+ — відповідає пробілам або комам (один або більше).
  • preg_split() розбиває рядок на масив за вказаним шаблоном.

4. Пошук усіх URL у тексті
<?php
$text 
"Відвідай https://example.com або http://test.org для деталей.";
$pattern "/https?:\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/";
preg_match_all($pattern$text$matches);

print_r($matches[0]);
/* Виведе:
Array
(
    [0] => https://example.com
    [1] => http://test.org
)
*/
?>

Пояснення:
  • https? — відповідає "http" або "https" (де ? робить "s" необов'язковим).
  • :\/\/ — відповідає "://".
  • [a-zA-Z0-9.-]+ — доменне ім'я.
  • \. — крапка.
  • [a-zA-Z]{2,} — домен верхнього рівня.

Поради для ефективного використання регулярних виразів
  • Тестуйте шаблони: Використовуйте онлайн-сервіси, такі як regex101.com, для перевірки регулярних виразів перед їх використанням у коді.
  • Оптимізуйте продуктивність: Уникайте надмірно складних шаблонів, які можуть сповільнити виконання.
  • Екранування: Якщо потрібно знайти спеціальні символи (наприклад, ., *), екрануйте їх за допомогою \.
  • Використовуйте модифікатори:

    • i — нечутливість до регістру.
    • m — багатостроковий режим.
    • u — підтримка UTF-8.

FAQ: Поширені запитання про регулярні вирази в PHP
1. Що таке регулярні вирази?
Регулярні вирази — це шаблони для пошуку та маніпуляції текстом. Вони дозволяють знаходити, перевіряти або замінювати частини тексту за певними правилами.

2. Чому preg_match() повертає false?
Це може статися через неправильний синтаксис шаблону. Перевірте шаблон на помилки, використовуючи інструменти для тестування regex, і переконайтеся, що ви правильно екрануєте спеціальні символи.

3. Як зробити регулярний вираз нечутливим до регістру?
Додайте модифікатор i після шаблону, наприклад: /шаблон/i.

4. Як знайти кілька збігів у тексті?
Використовуйте preg_match_all() замість preg_match(), щоб отримати всі збіги.

5. Чи можна використовувати регулярні вирази для парсингу HTML?
Хоча це можливо, регулярні вирази не рекомендуються для парсингу HTML, оскільки він має складну структуру. Краще використовувати бібліотеки, такі як DOMDocument.

6. Як обробляти Unicode у регулярних виразах?
Додайте модифікатор u до шаблону, наприклад: /шаблон/u, щоб увімкнути підтримку UTF-8.

7. Чи є обмеження у регулярних виразах PHP?
Так, складні шаблони можуть бути повільними або споживати багато пам'яті. Завжди оптимізуйте шаблони та тестуйте їх на реальних даних.

Висновок
Регулярні вирази в PHP — це незамінний інструмент для роботи з текстом, який відкриває безліч можливостей для розробників. Від перевірки введених даних до складного аналізу тексту — regex може значно спростити задачі. Використовуйте приклади з цієї статті, експериментуйте та вдосконалюйте свої навички!