Регулярные выражения в PHP. Функция preg_match и utf-8

Регулярные выражения в PHP. Функция preg_match и utf-8

От автора: приветствую вас, друзья. В предыдущей статье мы с вами говорили о специфике работы регулярных выражений в PHP с кириллицей. Однако использовали мы при этом кодировку windows-1251. В этой статье мы уже будем работать с кодировкой utf-8 и используем функцию preg_match для поиска кириллицы в тексте. Начнем?

Итак, в прошлой статье мы с вами использовали в качестве подопытного кролика следующую строку текста: «Иван Родил Девчонку, Велел Тащить Пелёнку». И вот такое регулярное выражение:

$pattern = '#[А-Яа-яЁё]+#';
 

Этот шаблон вполне корректно работал с текстом в кодировке windows-1251, то есть с однобайтовой кодировкой. Сейчас эта кодировка используется все реже и реже. Практически стандартом стала кодировка utf-8. Давайте используем ее:

<?php
header("Content-type: text/html; charset=utf-8");

$str = 'Иван Родил Девчонку, Велел Тащить Пелёнку';
$pattern = '#[А-Яа-яЁё]+#';

preg_match_all($pattern, $str, $matches);
print_r($matches);

Посмотрим на результат:

Упс, что-то не то. Почему так? Дело в том, что регулярные выражения по умолчанию работают с однобайтовой кодировкой. Кодировка же utf-8 — многобайтная. Для того, чтобы все работало корректно, необходимо всего лишь использовать специальный модификатор — u, который переводит шаблон регулярного выражения в режим совместимости с юникодом.

$pattern = '#[А-Яа-яЁё]+#u'; 

Вот теперь все работает корректно:

Как видим, все достаточно просто. Не забывайте об этом модификаторе и регулярные выражения будут правильно работать с юникодом. Стоит отметить, что этот модификатор присущ PHP. В JavaScript, к примеру, такого модификатора нет и регулярные выражения будут корректно работать с текстом в любом случае.

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

Хотите изучить регулярные выражения на PHP?

Прямо сейчас посмотрите 12-ти часовой курс по регулярным выражениям на PHP!

Смотреть курс

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree