Перейти к основному содержимому

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

Регулярное выражение описывает то, что вы ищете в тексте. Вы пишете шаблон из символов, а поиск использует этот шаблон, чтобы находить совпадения.

Шаблоны могут состоять всего из одного символа или быть гораздо сложнее.

Имея шаблон, вы можете использовать его для любого поиска или замены в тексте.


Синтаксис

В PHP регулярное выражение записывается как строка, состоящая максимум из трёх частей: разделителей, самого шаблона и, если они нужны, модификаторов.

Синтаксис регулярного выражения

Здесь косые черты - это разделители, PromptCookbook - шаблон, а i - модификатор:

index.php
$exp = "/PromptCookbook/i";

Функции для работы с регулярными выражениями

С регулярными выражениями работают несколько функций PHP. Чаще всего вы будете использовать эти три:

  • preg_match() - Даёт 1, если строка содержит шаблон, иначе 0
  • preg_match_all() - Считает, сколько раз шаблон встречается в строке; результат может быть равен 0
  • preg_replace() - Возвращает новую строку, в которой совпавшие части заменены другой строкой

Использование preg_match()

Чтобы узнать, содержит ли строка совпадение с шаблоном, вызовите preg_match().

Пример preg_match()

Найдите «PromptCookbook» в строке без учёта регистра. Результат равен 1, потому что совпадение есть:

Prompt
Напишите PHP-скрипт, который с помощью preg_match() выполняет поиск «PromptCookbook» без учёта регистра в строке «Visit PromptCookbook» и выводит, был ли найден совпадающий фрагмент.
Вывод: PHP-скрипт

Использование preg_match_all()

Когда вам нужно количество совпадений с шаблоном в строке, используйте preg_match_all().

Пример preg_match_all()

Посчитайте, сколько раз «ain» встречается в строке, без учёта регистра:

Prompt
Напишите PHP-скрипт, который с помощью preg_match_all() без учёта регистра подсчитывает количество вхождений «ain» в строке «The rain in Spain falls mainly on the plain» и выводит это количество.
Вывод: PHP-скрипт

Использование preg_replace()

С помощью preg_replace() каждое совпадение с шаблоном в строке заменяется другой строкой.

Пример preg_replace()

Замените Microsoft на PromptCookbook в строке, используя шаблон без учёта регистра:

Prompt
Напишите PHP-скрипт, который с помощью preg_replace() без учёта регистра заменяет «Microsoft» на «PromptCookbook» в строке «Visit Microsoft!» и выводит результат.
Вывод: PHP-скрипт

Модификаторы регулярных выражений

Добавление модификатора меняет поведение поиска.

  • i - Не учитывает разницу между прописными и строчными буквами
  • m - Включает многострочный режим, так что шаблоны для начала или конца строки совпадают в начале или конце каждой строки текста
  • u - Обеспечивает правильное совпадение шаблонов в кодировке UTF-8

Шаблоны регулярных выражений

Квадратные скобки позволяют найти один символ из набора или диапазона:

  • [abc] - Один символ из перечисленных в скобках
  • [^abc] - Один символ, не перечисленный в скобках
  • [a-z] - Одна строчная буква
  • [A-z] - Одна буква, прописная или строчная; этот диапазон также охватывает специальные символы, расположенные между Z и a
  • [A-Z] - Одна прописная буква
  • [123] - Одна цифра из перечисленных в скобках
  • [0-5] - Одна цифра от 0 до 5
  • [0-9] - Одна цифра от 0 до 9

Метасимволы

Некоторые символы в шаблоне не понимаются буквально. У каждого из этих метасимволов своя задача:

  • | - Разделяет варианты, и совпасть может любой из них, как в cat|dog|fish
  • . - Ровно один символ любого вида
  • ^ - Привязывает совпадение к началу строки, как в ^Hello
  • $ - Привязывает совпадение к концу строки, как в World$
  • \d - Цифра
  • \s - Пробельный символ
  • \b - Граница слова: \bWORD совпадает в начале слова, а WORD\b совпадает в его конце
  • \x{xxxx} - Символ Юникода с шестнадцатеричным номером xxxx (нужен модификатор u)

Квантификаторы

Квантификатор указывает, сколько раз что-либо может встречаться:

  • n+ - Строка с одним или несколькими n
  • n* - Строка, в которой n встречается любое количество раз, включая ни одного
  • n? - Строка, в которой n встречается один раз или ни разу
  • n{x} - Строка с последовательностью ровно из X символов n
  • n{x,y} - Строка с последовательностью от X до Y символов n
  • n{x,} - Строка с последовательностью из X или более символов n

Группировка

Заключите часть шаблона в круглые скобки (), и квантификатор будет применяться ко всей этой части. Скобки также позволяют выделить части шаблона, чтобы использовать их как совпадение.

Пример группировки

Найдите слово «banana», задав в поиске ba и два повторения na:

Prompt
Напишите PHP-скрипт, который с помощью preg_match() и группировки ищет «banana», отыскивая «ba», за которым следуют два вхождения «na», в строке «I like bananas», и выводит, был ли найден совпадающий фрагмент.
Вывод: PHP-скрипт