我需要将大写单词格式化为粗体,但如果单词包含两个空格,则不起作用
有没有办法让regex只与以冒号结尾的单词匹配?
$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
是一个多行文本,因此有许多小写和大写单词,但我只需要更改一些
你可以这样做:
$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
,让每个单词之间有一个以上的空格。
除非您有充分的理由使用该regexp,否则请尝试更简单的方法,如:
/([A-Z's]+):/
此外,正如您所知,您可以使用星号指定一个或多个空格字符:'s*