在PHP中以文本形式加粗用户名

时间:2015-04-11 21:57:57

标签: php regex

$text = 'Hello @demo here!';
$pattern = '/@(.*?)[ ]/';
$replacement = '<strong>${1}</strong> ';
echo preg_replace($pattern, $replacement, $text);

这很有效,我得到这样的HTML:Hello <strong>demo</strong> here!。但是当@demo位于字符串的末尾时,这不起作用,例如:$text = 'Hello @demo';。如何更改我的模式,因此只要字符串结束,它就会返回相同的输出。

问题2:

如果字符串与$text = 'Hello @demo!';类似,那么它会不会将!作为粗体文字?只需抓住spaceend of stringnot real-word

抱歉英语不好,希望你知道我需要什么。

3 个答案:

答案 0 :(得分:2)

为了选择以@符号开头的单词,这个正则表达式将起作用:

$pattern = "/@(\w+)\b/"

`\ w`是`[a-zA-Z0-9_]`的简写字符类。 `\ b`是单词开头或结尾的锚点,在本例中是结尾。因此正则表达式是:选择以“@”开头,后跟一个或多个单词字符的内容,直到到达单词的结尾

参考:http://www.regular-expressions.info/tutorial

答案 1 :(得分:1)

您可以添加一个选项以匹配字符串的结尾:

 @(.*?)(?= |\p{P}?$)

替换为<strong>$1</strong>。 您还可以使用\p{P}(任何Unicode标点符号)来防止粗体格式的标点符号。

这是demo

答案 2 :(得分:1)

您可以使用字边界,这是他们的目的:

$pattern = '/@(.+?)\b/';

这也适用于问题2