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

时间:2013-07-22 20:37:11

标签: php regex preg-replace

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

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

真实代码

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

输出:PAREDEHIDRÁULICA:teste dePAREDEHIDRÁULICA

正确的输出:PAREDEHIDRÁULICA:teste deparedehidráulica

3 个答案:

答案 0 :(得分:1)

preg_replace function的第一个参数是正则表达式(或正则表达式数组)。

我认为应该是:

$arr = array("/\bred apple\b/i", "/\bgreen lemon\b/i");
$arr2 = array("RED APPLE", "GREEN LEMON");

$repl = preg_replace($arr, $arr2, $string, 1);

答案 1 :(得分:0)

如果您删除此行末尾的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

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

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

答案 2 :(得分:0)

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

$_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