我有以下正则表达式:
$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。看看这个问题。