Регулярні вирази для php - навчися складати їх з легкістю!

Регулярні вирази для php - навчися складати їх з легкістю!

Рано чи пізно кожен веб розробник стикається з завданням впровадження в свій код регулярних виразів. Багато хто думає, що складати їх неймовірно складно і під силу тільки обраним. Насправді це не так. І сьогодні я покажу Вам як складати регулярні вирази.

Але для початку трохи загальної інформації. Що таке регулярні вирази і для чого вони потрібні?

Регулярні вирази (англ. Regular expressions) - формальна мова пошуку і здійснення маніпуляцій з підрядками в тексті, заснований на використанні метасимволов (символів-джокерів, англ. Wildcard characters). По суті це рядок-зразок (англ. Pattern, по-російськи її часто називають «шаблоном», «маскою»), що складається з символів і метасимволов і задає правило пошуку.

Виписка з Вікіпедії

Іншими словами, регулярний вираз означає регулярну послідовність символів або чисел або якого-небудь іншого шаблону, тобто вираз, який потрібно знайти.

Регулярні вирази найбільш часто використовуються для пошуку і підстановки тексту, з їх допомогою можна перевіряти правильність введеної користувачем інформації, щоб уникнути введення некоректної інформації або інформації в невідповідному форматі.

Принцип їх роботи досить простий.

По-перше, задається рядок, в якій буде проводитись пошук. По-друге, створюється шаблон цього самого пошуку.

І якщо Ви знаєте як правильно створити шаблон під ту чи іншу задачу, то за допомогою регулярних виразів Ви може знайти практично все, що завгодно.

Будемо розбирати відразу все на практиці і дивитися на отримані результати.

Я створюю новий php файл для тестування всього коду. Ви можете зробити те ж саме. Створіть файл і пропишіть в ньому між тегів body відкриває і закриває теги для php коду:

Відразу запустіть файл в браузері (переконайтеся, що Ваш Денвер працює). Якщо Ви не знаєте, то для запуску файлу, потрібно прописати в командному рядку браузера localhost / ім'я папки, в якій лежить файл / ім'я файла.php.

Отже, почнемо з самого початку. Для початку я напишу текст, в якому буду гикати відповідності і розміщу його в змінну (звичайно ж текст повинен бути укладений в лапки).

Ось такий от текст. Тепер потрібно створити шаблон нашого регулярного виразу.

Давайте підемо від простого до складного. Для початку пошукаємо в тексті слово «інтернет», дізнаємося скільки разів воно зустрічається і виведемо на екран.

Для цього давайте складемо простий шаблон регулярного виразу і помістимо його в змінну.

Почнемо з того, що регулярне вираз - це проста рядок, і її потрібно взяти в лапки.

Крім того, регулярні вирази починаються і закінчуються з прямого слеша. Те, що знаходиться між Слеш і становить суть регулярного виразу.

Таким чином, давайте вставимо в наш код найпростіший шаблон регулярного виразу, занесений в змінну:

Але це всього лише змінні. А тепер найголовніше!

Пропишемо функцію, яка буде шукати відповідності в нашому тексті на нашу регулярному виразу.

У PHP для цього використовується спеціальна функція «preg_match».

Функція preg_match і функція preg_match_all.

У функцію preg_match передаються 2 параметри: регулярний вираз і рядок, в якій потрібно вести пошук.

Ця функція може повернути значення: або 0 (якщо збігу відсутні), або 1 (при виявленні першого збігу, а потім просто зупиняє пошук).

Якщо ж нам потрібні всі відповідності з шаблоном, то потрібно використовувати функцію preg_match_all.

У функцію preg_match_all передаємо 3 параметра: регулярний вираз; рядок, в якій ведемо пошук; змінна, в яку помістимо результати пошуку.

Так як нам потрібні всі збіги, наявні в тексті, то ми будемо використовувати функцію preg_match_all. Отже, наш код поповниться наступним рядком:

$ Result = preg_match_all ($ regex, $ string_search, $ out);

Залишилося вивести на екран результат. Я пропоную спочатку вивести число збігів, а потім і самі ці збіги в циклі for (можливо на практиці висновок результатів Вам і не знадобитися, але в цьому уроці я роблю його для наочності).

Додамо до нашого коду наступні рядки:

echo $ result. "
"; For ($ i = 0; $ i

Тепер якщо перевірити сторінку в браузері, то ми побачимо наступний результат:

Регулярні вирази для php - навчися складати їх з легкістю!

Якщо нам потрібно знайти одне значення або інше, наприклад, ми хочемо знайти слово «інтернет» або «сайт», то між шуканими значеннями в шаблоні потрібно поставити спеціальний символ «|». В такому випадку, регулярний вираз буде виглядати так:

А результат на екрані ми побачимо такий:

Регулярні вирази для php - навчися складати їх з легкістю!

Пропоную почати з кінця.

1. Для початку давайте скажемо нашому шаблоном вивести всі з .ru або з .com.

Зроблю невеличкий відступ і скажу, що точка (.) В регулярних виразах позначає - «будь-який символ», тому крапку потрібно екранувати. Зробити ми це можемо за допомогою зворотного слеша (\). З символом або (|) Ви вже знайомі.

Поки виходить ось так:

Регулярні вирази для php - навчися складати їх з легкістю!

2. Тепер зазначимо, що перед .ru або .com можуть стояти символи латинського алфавіту від a до z, також цифри від 0 до 9 і знак «-». Це буде виглядати так: [a-z0-9-]. А ще нам потрібно вказати квантор (простими словами: те, скільки таких символів може бути). Наприклад, якщо я напишу так: - це буде означати 2 або більше.

Залишилося все це об'єднати. До речі перед цим потрібно укласти вже наявну частину (\ .ru) | (\. Com) в дужки. Якщо ми цього не зробимо, то все, що ми намішем попереду буде стосуватися тільки .ru.

Об'єднуючи все вищесказане, отримаємо такий код:

А на екрані побачимо наступне:

Регулярні вирази для php - навчися складати їх з легкістю!

що потрібно для цього зробити?

Регулярні вирази для php - навчися складати їх з легкістю!

Тепер, я думаю, що Вам стало зрозуміло, як скласти таке регулярний вираз. Воно, звичайно ж не універсально, я просто придумала його для прикладу. Впевнена, що якщо посидіти і гарненько подумати, то можна його вдосконалити.

Взагалі, складання регулярного виразу схоже на складання вирівняні.

Давайте розглянемо ще один простий приклад.

Знайдемо всі згадки років в нашому тексті.

Зробити це надзвичайно просто.

Рік повинен складатися з цифр. Для цього ми будемо використовувати символьний клас (\ d). Цей символьний клас позначає - «Цифра». Крім того, рік повинен складатися з чотирьох цифр, а для цього ми будемо використовувати квантор.

У підсумку, регулярний вираз буде виглядати ось так:

А в результаті ми отримаємо висновок різного віку, що зустрічаються в тексті (у нас їх в тексті два):

Регулярні вирази для php - навчися складати їх з легкістю!

На останок я хочу Вам запропонувати один дуже непоганий ресурс, який допоможе Вам у вивченні регулярних виразів. Називається він regexlib.com.

У ньому є тестер регулярних виразів. Тобто ви можете писати регулярні вирази і тестувати їх роботу прямо в цьому ресурсі. Для цього потрібно перейти на вкладку «Redex Tester», в поле «Source» потрібно прописати той текст, в якому буде проводитись пошук. А в полі «Regular Expression» потрібно писати саме регулярний вираз. Зверніть увагу, що коли будете писати регулярний вираз, то вводити "//" в полі не потрібно. Відразу пишіть саме регулярний вираз. Після написання натискаєте на кнопку «Submit» і дивіться результати. Це дуже зручно!

Регулярні вирази для php - навчися складати їх з легкістю!

Регулярні вирази для php - навчися складати їх з легкістю!

Щоб розбиратися було зручніше, в кінці цієї статті я додаю файл-таблицю з усіма спеціальними символами, кванторами і діапазонами. Ви можете роздрукувати її і завжди тримати під рукою, тоді Вам не потрібно буде шукати десь, що позначає кожен певний символ в регулярному виразі.

Мені ця табличка дуже допомагає, я думаю, що вона допоможе і Вам.

Насправді про регулярні вирази можна писати дуже багато, але хочеться сказати, що щоб навчитися писати їх швидко і ефективно потрібно практикуватися. Практикуйтеся! Адже так приємно, коли запускаєш скрипт, а він працює як треба!

Успіхів! І до нових зустрічей!

buen articulo, gracias

І, до речі, зовнішніх посилань у Вас здається забагато (навіть для 20 сторінок). Раджу позакривати їх від індексування (хоча б більшу частину).

Спасибі здорово розкладено

Дякую за просту і гарну статтю