у меня есть следующее регулярное выражение:PHP preg_replace проблемы при замене несколько слов
$patterns = array
(
'/\b(gubalowka hegy)\b/i',
'/\b(krakkó|wawel|wawelban|auschwitz|auschwitzba|auschwitz-birkenua)\b/i',
'/\b(királyi|város|fogaskerekű|séta)\b/i',
);
$replaces = array
(
'<strong>$1</strong>',
'<u><em>$1</em></u>',
'<strong>$1</strong>',
);
preg_replace($patterns, $replaces, $text);
Проблема заключается в том, что только некоторые слова заменяются.
На этом примере только эти слова:
Séta => <strong>Séta</strong>
Krakkó => <u><em>Krakkó</em></u>
királyi => <strong>királyi</strong>
Auschwitz-Birkenua => <u><em>Auschwitz-Birkenua</em></u>
Другие слова остаться нетронутыми.
Я попытался заставить его работать несколькими способами (заменяя каждое слово отдельно, заменяя группу слов без массивов), но ни один из них не работал.
Здесь Вы можете проверить это: http://adriaholiday.dev.webndev.hu/ajanlatok/lengyelorszagi-hetvege.html
регулярные выражения, нужно регистрироваться в хромированной консоли разработчика
Может кто-нибудь помочь? Спасибо.
Edit:
Если я пишу регулярное выражение, он работает
$pattern = '/\b(krakkó|wawel|wawelban|auschwitz|auschwitzba)\b/iu'
$replace = '<strong><u>$1</u></strong>';
$text = preg_replace($pattern, $replace, $text);
этот вопрос появляется только тогда, когда регулярное выражение получает генерируется
$replace = '<strong>$1</strong>';
foreach (...)
{
$words .= "|{$word}"; // first vertical bar removed ...
}
// encoding UTF8
// pattern: /\b(krakkó|wawel|wawelban|auschwitz|auschwitzba)\b/iu
$pattern = '/\b(' . $words . ')\b/iu';
$text = preg_replace($pattern, $replace, $text);
Это может быть проблема с ascii vs unicode - я долго не много делал с регулярным выражением php, но это может быть область для просмотра. Насколько хорошо php обрабатывает регистрозависимые строки unicode? –
добавьте 'u' к вашим модификаторам ('/foo/iu'), чтобы сообщить PCRE, чтобы обработать шаблон как UTF-8. см. http://php.net/manual/en/reference.pcre.pattern.modifiers.php – rodneyrehm
Я пробовал «u» уже, это не помогает – csanyigabor