我需要将大写匹配更改为粗体但包括冒号
$str = "GOOD MORNING:";
preg_replace("/\b([A-Z]{2,}(\s[A-Z]{2,})?)\b/", "<b>$1</b>", $str);
它返回:
<b>GOOD MORNING</b>:
它应该返回:
<b>GOOD MORNING:</b>
我所有的尝试都使我的替换停止工作
我需要将大写匹配更改为粗体但包括冒号
$str = "GOOD MORNING:";
preg_replace("/\b([A-Z]{2,}(\s[A-Z]{2,})?)\b/", "<b>$1</b>", $str);
它返回:
<b>GOOD MORNING</b>:
它应该返回:
<b>GOOD MORNING:</b>
我所有的尝试都使我的替换停止工作
您必须在字符类中添加冒号。或者就在您捕获组的右括号之前(如果您希望它是可选的,请使用问号)。
$str = preg_replace('~[A-Z]{2,}(?:\s[A-Z]{2,})?:?~', '<b>$0</b>', $str);
注意:这里不需要词边界,因为正则表达式引擎从左边开始,你的量词{2,}
是贪婪的)
preg_replace("/([A-Z]{2,}\s[A-Z]{2,}:?)/", "<b>$1</b>", $str);
输出:
<b>GOOD MORNING:</b>
试试这个,这对你有用,
$str = "GOOD MORNING";
preg_replace("/\b([A-Z]{2,}(\s[A-Z]{2,})?)\b/", "<b>$1:</b>", $str);
有几种不同的方法:
以下任何一项就足够了:
preg_replace("/([A-Z:]{2,}(\s[A-Z:]{2,})?)/", "<b>$1</b>", $str);
preg_replace("/([A-Z]{2,}(\s[A-Z:]{2,})?)/", "<b>$1</b>", $str);
preg_replace("/([A-Z]{2,}(\s[A-Z]{2,})?:?)/", "<b>$1</b>", $str);
这是我的测试输出:
<?php
$str = "GOOD MORNING:";
echo preg_replace('/([A-Z:]{2,}(\s+[A-Z:]{2,})?)/', "<b>$1</b>", $str);
echo preg_replace('/([A-Z]{2,}(\s+[A-Z:]{2,})?)/', "<b>$1</b>", $str);
echo preg_replace('/([A-Z]{2,}(\s+[A-Z]{2,})?:?)/', "<b>$1</b>", $str);
?>
侏儒:~ masud$ php foo.php
<b>GOOD MORNING:</b><b>GOOD MORNING:</b><b>GOOD MORNING:</b>