Объясните это регулярное выражение UTF-8
Этот вопрос задал вопрос о том, как определить строки UTF-8 - Как определить, нужно ли применять utf8 для декодирования или кодирования строки?
Решением было следующее:
if (preg_match('!!u', $string))
{
// this is utf-8
}
else
{
// definitely not utf-8
}
Мне не удалось выяснить, как разбить выражение "!! u". Я нажал на весь материал PHP PCRE и, возможно, пропустил описание для "!". знаки и "u" -мероприятия. Я попытался запустить его через Perl YAPE:: Regex:: Объяснение (как показано в Пожалуйста, объясните это регулярное выражение Perl) и не смог получить что-то, что имело смысл [ m no perl expert - не знаю, подал ли я ему правильное выражение/строку].
Итак... как работает preg_match('!!u', $string)
?
Ответы
Ответ 1
Это просто пустое регулярное выражение. !
является delimiter и u
является modfier.
Что касается того, почему это работает, из описания PHP вручную модификатора u
(выделение мое):
Этот модификатор включает дополнительные функции PCRE, которые несовместимы с Perl. Строки шаблонов рассматриваются как UTF-8. Этот модификатор доступен с PHP 4.1.0 или выше в Unix и с PHP 4.2.3 на win32. Срок действия шаблона UTF-8 проверяется с PHP 4.3.5.
Ответ 2
!
используется как разделитель вместо /
. Я переписал это для вас, //u
- это одно и то же. u
- это модификатор, который обрабатывает шаблон как utf8.