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