0

有时字符串有单字和双字,它适用于单字,但不适用于双字,因为空格

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

输出:<b>UNITED</b> <b>STATES</b> teste 每次我发送我的表格时,它都会再次格式化<b><b>UNITED</b></b> <b><b>STATES</b></b> test

$str = "UNITED STATES test"对于它应该输出的字符串:<b>UNITED STATES test</b> instead of <b>UNITED</b> <b>STATES</b> test

4

1 回答 1

1

字符类[A-Z]不包含任何空格。因此,如果需要,请添加空格:

-- 添加了\s

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

但是,如果您最多只需要最多两个单词,那么这可能会比您需要的更多:

--添加了:(\s[A-Z]{2,})?

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

至于双重<b><b>......</b></b> 如果你真的必须在一行代码中完成所有操作,那么可能有一种方法可以使用后视和前瞻。但是,我会像这样进行快速而肮脏的 preg_replace 清理:

 $_POST['descricao'] = preg_replace('/<(\/)?b><(?:\/)?b>/', "<$1b>", $_POST['descricao']);

^^ 这将删除所有重复项

于 2013-07-25T20:13:57.447 回答