PHP Функції Регулярних виразів
PHP Регулярні вирази. Інтро
Регулярні вирази дозволяють шукати та замінювати шаблони в рядках.
Інсталяція
Функції регулярних виразів PHP є частиною ядра PHP. Для використання цих функцій не потрібна установка.
Конфігурація середовища виконання
Ці налаштування у php.ini можна використовувати для обмеження кількості часу або ресурсів, які використовуються під час оцінювання регулярних виразів.
Назва | За замовчуванням | Опис | Змінний |
---|---|---|---|
pcre.backtrack_limit | "1000000" | Максимальна кількість зворотних запитів, яку дозволено виконувати механізму регулярних виразів під час обчислення виразу (доступно, починаючи з PHP 5.2) | PHP_INI_ALL |
pcre.recursion_limit | "100000" | Максимальна глибина рекурсії, яку дозволено досягати механізму регулярних виразів під час обчислення виразу (доступно, починаючи з PHP 5.2) | PHP_INI_ALL |
pcre.jit | "1" | Якщо встановлено значення "1", увімкнеться оперативна компіляція PCRE (регулярні вирази, сумісні з Perl). (доступно з PHP 7.0) | PHP_INI_ALL |
PHP Функції регулярних виразів
Функція | Опис |
---|---|
preg_filter() | Повертає рядок або масив із заміненими збігами шаблону, але лише якщо збіги знайдено |
preg_grep() | Повертає масив, що складається лише з елементів вхідного масиву, які відповідають шаблону |
preg_last_error() | Повертає код помилки, який вказує на причину невдачі останнього виклику регулярного виразу |
preg_match() | Знаходить перший збіг шаблону в рядку |
preg_match_all() | Знаходить усі збіги шаблону в рядку |
preg_replace() | Повертає рядок, де збіги шаблону (або масиву шаблонів) замінено підрядком (або масивом підрядків) у заданому рядку |
preg_replace_callback() | За наявності виразу та зворотного виклику повертає рядок, у якому всі збіги виразу замінено підрядком, повернутим зворотним викликом |
preg_replace_callback_array() | Маючи масив, що асоціює вирази зі зворотними викликами, повертає рядок, у якому всі збіги кожного виразу замінено підрядком, повернутим зворотним викликом |
preg_split() | Розбиває рядок на масив, використовуючи збіги регулярного виразу як розділювачі |
preg_quote() | Екранує символи, які мають особливе значення в регулярних виразах, ставлячи перед ними зворотну скісну риску |
Модифікатори регулярних виразів
Модифікатори можуть змінювати спосіб виконання пошуку.
Модифікатор | Опис |
---|---|
i | Виконує пошук без урахування регістру |
m | Виконує багаторядковий пошук (шаблони, які шукають початок або кінець рядка, відповідатимуть початку чи кінці кожного рядка) |
u | Вмикає правильну відповідність шаблонів у кодуванні UTF-8 |
Шаблони регулярних виразів
Дужки використовуються для пошуку діапазону символів:
Вираз | Опис |
---|---|
[abc] | Знайти один символ із варіантів у дужках |
[^abc] | Знайти будь-який символ НЕ в дужках |
[0-9] | Знайти один символ із діапазону від 0 до 9 |
Метасимволи
Метасимволи – це символи зі спеціальним значенням:
Метасимволи | Опис |
---|---|
| | Знайти збіг для будь-якого шаблону, розділеного | а саме: cat|dog|fish |
. | Знайти лише один екземпляр будь-якого символу |
^ | Знайти відповідність на початку рядка, як у: ^Hello |
$ | Знайти збіг у кінці рядка, як у: World$ |
\d | Знайти цифру |
\s | Знайти пробіл |
\b | Знайти збіг на початку такого слова: \bWORD або в кінці такого слова: WORD\b |
\uxxxx | Знайти символ Unicode, заданий шістнадцятковим числом xxxx |
Квантори
Квантори визначають кількість:
Квантор | Опис |
---|---|
n+ | Відповідає будь-якому рядку, який містить принаймні один n |
n* | Відповідає будь-якому рядку, який містить нуль або більше випадків n |
n? | Відповідає будь-якому рядку, який містить нуль або одне входження n |
n{x} | Відповідає будь-якому рядку, який містить послідовність X n's |
n{x,y} | Збігається з будь-яким рядком, який містить послідовність від X до Y n's |
n{x,} | Збігається з будь-яким рядком, який містить послідовність принаймні X n's |
Примітка: Якщо ваш вираз потребує пошуку одного зі спеціальних символів, ви можете використовувати зворотну скісну риску ( \ ), щоб екранувати їх. Наприклад, для пошуку одного або кількох знаків запитання можна використати наступний вираз: $pattern = '/\?+/';