1

我需要将大写匹配更改为粗体但包括冒号

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

我所有的尝试都使我的替换停止工作

4

4 回答 4

1

您必须在字符类中添加冒号。或者就在您捕获组的右括号之前(如果您希望它是可选的,请使用问号)。

$str = preg_replace('~[A-Z]{2,}(?:\s[A-Z]{2,})?:?~', '<b>$0</b>', $str);

注意:这里不需要词边界,因为正则表达式引擎从左边开始,你的量词{2,}是贪婪的)

于 2013-07-27T19:12:10.910 回答
0
preg_replace("/([A-Z]{2,}\s[A-Z]{2,}:?)/", "<b>$1</b>", $str);

输出:

<b>GOOD MORNING:</b>
于 2013-07-27T19:16:10.503 回答
0

试试这个,这对你有用,

$str = "GOOD MORNING";
preg_replace("/\b([A-Z]{2,}(\s[A-Z]{2,})?)\b/", "<b>$1:</b>", $str);
于 2013-07-27T19:17:56.433 回答
0

有几种不同的方法:

以下任何一项就足够了:

  1. preg_replace("/([A-Z:]{2,}(\s[A-Z:]{2,})?)/", "<b>$1</b>", $str);
  2. preg_replace("/([A-Z]{2,}(\s[A-Z:]{2,})?)/", "<b>$1</b>", $str);
  3. 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>
于 2013-07-27T19:21:47.847 回答