Сегодня столкнулся с задачей, которая казалась на первый взгляд довольно простой, а на самом деле в ней крылась определенная проблема.
В общем, нужно было вытащить из текста все русские слова (слова, содержащие кириллические символы). Задача довольно простая, если использовать регулярные выражения:
preg_match_all('/([а-яёА-ЯЁ]+)/',$text,$words);
здесь $text -> текст, который нужно обработать,
$words -> массив из слов, который мы получим в результате работы
Регулярное выражение отработало замечательно и мне удалось получить массив из необходимых мне слов.
НО, проблема заключается в том, что слова эти были не в той кодировке.
Вот такая картина открылась предо мной.
На самом деле все оказалось очень просто. Регулярные выражения по умолчанию не работают с русскими буквами и кириллицей.
Чтобы это стало возможным, нужно использовать специальный модификатор \u, который позволяет использовать все символы, которые входят в таблицу Юникода.
В итоге, выражение приняло вид:
preg_match_all('/([а-яёА-ЯЁ]+)/u',$text,$words);
и все стало отображаться нормально.
Если вы не встречались с такой проблемой, то возьмите себе на вооружение.
Понравилась заметка?
Получайте подобные на e-mail.




Вы мой спаситель!
Три часа промучился, пока по запросу "preg_match_all русские буквы" сюда не попал.
Да, к сожалению с русскими буквами возникают проблемы в Рег-Экспах… тут ничего не поделаешь… даже w обычно думает что это a-zA-Z
а внутри регулярки если писать в юникоде – то обязательно нужно ставить флаг u
узнал много нового, спасибо
узнал много нового, спасибо slivki.cc
Мне, как человеку, который делает первые шаги в мире програмирования, была очень полезной ваша статья, правда, с вопросом замены букв еще не встречался, но на будущее уже знаю как подобную проблему решить. СПасибо!
Проба