-1

我需要将大写单词格式化为粗体,但如果单词包含两个空格,它就不起作用

有没有办法让正则表达式只匹配以冒号结尾的单词?

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

输出:<b>BAKA NO TEST:</b> hey

但它返回<b>BAKA</b> NO TEST: hey

原文$str是多行文本,所以有很多小写和大写单词,但我只需要更改一些

4

2 回答 2

0

除非您有充分的理由使用该正则表达式,否则请尝试更简单的方法,例如:

/([A-Z\s]+):/

此外,正如您所知,您可以使用星号来指定一个或多个空格字符:\s*

于 2013-07-30T21:37:36.210 回答
0

你可以这样做:

$txt = preg_replace('~[A-Z]+(?:\s[A-Z]+)*:~', '<b>$0</b>', $txt);

说明:

[A-Z]+      # uppercase letter one or more times
(?:         # open a non capturing group
    \s      # a white character (space, tab, newline,...)
    [A-Z]+  #
)*          # close the group and repeat it zero or more times

如果您想要一种更宽容的模式,您可以替换\s\s+以在每个单词之间允许多个空格。

于 2013-07-30T21:45:41.217 回答