PHP Regex: поиск статей для английского и арабского текста - PullRequest
2 голосов
/ 27 апреля 2011

Пример кода

Я ищу статьи по ключевым словам на английском и арабском языках. Статьи могут быть на английском или арабском языке.

Мой текущий код:

$k = implode("|", $keywords);
$regexp = "/(?i)\b(".$k.")\b/";
preg_match_all( $regexp, $content, $matches );

Но по некоторым причинам это не находит ключевые слова в арабских статьях. Я убедился, что ключевые слова и статьи читаются правильно; нет проблем с кодировкой.

Что я могу сделать, чтобы это исправить? Обратите внимание, что у меня нет возможности определить, написана ли статья или ключевое слово на английском или арабском языке, поэтому для их сопоставления требуется одно регулярное выражение.

1 Ответ

1 голос
/ 27 апреля 2011

У вашего регулярного выражения может просто отсутствовать никодальный флаг /u:

$regexp = "/(?i)\b(".$k.")\b/u";

В противном случае PCRE должен сравнивать байты. В этом случае он все еще может найти слова (когда кодировка UTF-8 идентична), но никогда не обнаружит слово \b oundaries.

Обновление
Хорошо, \b действительно обнаруживает только \w границы (поэтому зависит от настройки локали вместо флага / u). Тогда попробуйте это вместо этого, используя утверждения:

$regexp = "/(?<!\p{L})(".$k.")(?!\p{L})/ui";
...