php preg_replace问题,同时替换几个单词


php preg_replace issue while replacing several words

我有以下正则表达式:

$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

正则表达式记录在chrome-dev控制台中

有人能帮忙吗?非常感谢。

编辑:

如果我写正则表达式,它可以

$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);

检查mbstring和mbregex是否可用。PHP的默认类型ISO-8859-1不包括Ş、ü、Ő和Ű以及其他特殊字符(但我认为您只需要这些字符)。UTF-8可以,但您必须使用多字节函数。

要了解更多关于mbstring的信息,请查看PHP文档。它还包括mb_ereg_replace。

EDIT:我发现有了u标志,preg_space也可以使用UTF-8。看看这个问题。