От автора: приветствую вас, друзья. В этой статье мы с вами узнаем некоторую специфику работы регулярных выражений с кириллицей вообще и конкретно в PHP. Приступим?
До этого, в предыдущих статьях мы с вами использовали в качестве текста исключительно латинницу, кириллицы мы избегали. Теперь давайте попробуем найти все кириллические буквы в строке. В качестве «испытуемого» мы используем фразу, которая может быть знакома кому-то со школьной скамьи: «Иван Родил Девчонку, Велел Тащить Пелёнку». Эта фраза призвана была помочь запомнить падежи в русском языке, поскольку первая буква каждого слова совпадает с тем или иным падежом.
Итак, как мы помним из предыдущих уроков, есть метасимвол \w, совпадающий с буквами, цифрами и символом подчеркивания. Однако в данном случае он не подойдет, поскольку совпадает он только с латинницей, не с кириллицей.
Как видим, этот шаблон действительно не подходит. Для поиска кириллицы мы должны использовать символьный класс — [], в котором укажем диапазон кириллических букв от а до я.
Этот шаблон регулярного выражения уже лучше. Но все еще есть нюансы — не найдена буква ё. Эта буква в регулярных выражениях не входит в диапазон а-я и ее нужно указывать отдельно.
Вот теперь все отлично. Все кириллические буквы найдены. Однако шаблон мы тестировали в реализации регулярных выражений для JavaScript. Давайте попробуем протестировать его в PHP скрипте. Обратите внимание, я использую версию PHP 5.4 (в версиях ниже может быть другой результат). Также еще один нюанс — мы используем кодировку windows-1251 (в следующей статье мы узнаем нюансы работы с кодировкой utf-8).
Итак, скрипт ниже даст результат, который вы увидите на следующем скриншоте:
1 2 3 4 5 6 7 8 |
<?php header("Content-type: text/html; charset=windows-1251"); $str = 'Иван Родил Девчонку, Велел Тащить Пелёнку'; $pattern = '#[а-яё]+#i'; preg_match_all($pattern, $str, $matches); print_r($matches); |
Как видим, все кириллические буквы, кроме заглавных, были найдены. Модификатор i при этом не сыграл роли (напоминаю, кодировка документа windows-1251 и версия PHP 5.4). Для того, чтобы регулярное выражение для работы с кириллицей стало более универсальным, уберем модификатор и укажем диапазон заглавных букв:
1 |
$pattern = '#[А-Яа-яЁё]+#'; |
Вот теперь все работает, как нужно. На этом мы будем завершать сегодняшнюю статью. Больше о регулярных выражениях вы можете узнать из нашего курса по регулярным выражениям. Удачи!