Русские буквы в регулярных выражениях на PHP (проблемы с кодировкой).

Сегодня столкнулся с задачей, которая казалась на первый взгляд довольно простой, а на самом деле в ней крылась определенная проблема.

В общем, нужно было вытащить из текста все русские слова (слова, содержащие кириллические символы). Задача довольно простая, если использовать регулярные выражения:

preg_match_all('/([а-яёА-ЯЁ]+)/',$text,$words);

здесь $text -> текст, который нужно обработать,

$words -> массив из слов, который мы получим в результате работы

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

НО, проблема заключается в том, что слова эти были не в той кодировке.

Вот такая картина открылась предо мной.

Как же решить эту проблему?

На самом деле все оказалось очень просто. Регулярные выражения по умолчанию не работают с русскими буквами и кириллицей.

Чтобы это стало возможным, нужно использовать специальный модификатор \u, который позволяет использовать все символы, которые входят в таблицу Юникода.

В итоге, выражение приняло вид:

preg_match_all('/([а-яёА-ЯЁ]+)/u',$text,$words);

и все стало отображаться нормально.

Если вы не встречались с такой проблемой, то возьмите себе на вооружение.

Понравилась заметка?
Получайте подобные на e-mail.





***

6 комментариев: Русские буквы в регулярных выражениях на PHP (проблемы с кодировкой).

  1. Александр говорит:

    Вы мой спаситель!
    Три часа промучился, пока по запросу "preg_match_all русские буквы" сюда не попал.

  2. DonySuXX говорит:

    Да, к сожалению с русскими буквами возникают проблемы в Рег-Экспах… тут ничего не поделаешь… даже w обычно думает что это a-zA-Z
    а внутри регулярки если писать в юникоде – то обязательно нужно ставить флаг u

  3. Василий Бажан говорит:

    узнал много нового, спасибо

  4. Василий Бажан говорит:

    узнал много нового, спасибо slivki.cc

  5. Алексей говорит:

    Мне, как человеку, который делает первые шаги в мире програмирования, была очень полезной ваша статья, правда, с вопросом замены букв еще не встречался, но на будущее уже знаю как подобную проблему решить. СПасибо!

  6. Dima говорит:

    Проба

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

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

*

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