Объясните это регулярное выражение 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.