包含空格的单词的preg_replace不;不起作用


preg_replace for words containing space doesn't work

它不适用于包含空格的单词,它适用于单个单词

如果可能,将单词从数组更改为粗体

真实代码

$_POST['descricao'] = "parede hidráulica: teste de parede hidráulica";
$palavras = array("/'bparede hidráulica cozinha'b/i",
"/'bparede área de serviço'b/i",
"/'bparede area de serviço'b/i",
"/'bparede hidraulica cozinha'b/i",
"/'bparede hidráulica'b/i",
"/'bparede hidraulica'b/i",
"/'bparede box'b/i",
"/'btorneira'b/i",
"/'bbancada'b/i",
"/'bsoleira'b/i",
"/'bbaguete'b/i",
"/'brodapé'b/i",
"/'brodape'b/i",
"/'bparede'b/i");
$maiusculas = array_map('mb_strtoupper', $palavras);
$maiusculas = str_ireplace(''b/i', '', $maiusculas);
$maiusculas = str_ireplace('/'b', '', $maiusculas);
$_POST['descricao'] = preg_replace($palavras, $maiusculas, $_POST['descricao'], 1);

输出:PAREDE HIDRÁULICA:测试

正确输出:PAREDE HIDRÁULICA:测试

preg_replace函数的第一个参数是regex(或regex数组)。

我认为应该是:

$arr = array("/'bred apple'b/i", "/'bgreen lemon'b/i");
$arr2 = array("RED APPLE", "GREEN LEMON");
$repl = preg_replace($arr, $arr2, $string, 1);

如果删除此行末尾的count参数:

$_POST['descricao'] = preg_replace($palavras, $maiusculas, $_POST['descricao']);

这会给你:

PAREDE HIDRáULICA: teste de PAREDE HIDRáULICA

而不是:

PAREDE HIDRáULICA: teste de parede hidráulica

但是,您的代码的行为完全符合预期。

如果不适合您,您应该向我们提供您的预期输出,否则我们无法帮助您。

它是这样解决的,我已经改变了我的需求,使用这个正则表达式,如果单词是大写,它将与双单词匹配

$_POST['descicao'] = 'UNITED STATES test';
$_POST['descricao'] = preg_replace("/'b([A-Z]{2,}('s[A-Z]{2,})?)'b/", "<b>$1</b>"

输出:<b>UNITED STATES</b> test