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

Русский язык и регулярные выражения в PHP

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

Разберём следующие регулярные выражения:

<?php
  echo preg_match("/и/i", "И"); // Возвращает false вместо true
  echo preg_match("/[а-я]/", "И"); // Возвращает true вместо false
  echo preg_match("/[а-я]/i", "И"); // Работает правильно
?>

Как видите, работают регулярные выражения с русскими символами весьма странно. Решить быстро эти проблемы позволяет модификатор u:

<?php
  echo preg_match("/и/ui", "И"); // Работает правильно
  echo preg_match("/[а-я]/u", "И"); // Работает правильно
  echo preg_match("/[а-я]/ui", "И"); // Работает правильно
?>

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