我对正则表达式不好而且我被困在这里,我发现了一些链接,遗憾的是它没有用。
$str = preg_replace("/@([a-zA-Z0-9]+)/", '<span class="label label-default">$1</span>', $str);
$str = preg_replace("~/r(.*?)(?:<br>|$)~uis", '<font color="red">$1</font><br>', $str);
所以目前这两个都是正确的,他们都做我想要的
为了澄清:第一行在特殊的css类中执行@的下一个单词,第二行在/ r红色后执行文本行。
@在@dsa@email.com这样的东西上工作,而/ r在.com / r / test之类的东西上工作,两者都不是我想要的。
我已经尝试了这个,但它不起作用:/
"/(^|[ ])@([a-zA-Z0-9]+)/"
"/\b@([a-zA-Z0-9]+)/"
答案 0 :(得分:2)
你可以使用这个基于lookbehind的正则表达式:
$str = preg_replace('/(?<=^| )@([a-zA-Z0-9]+)/m', '<span class="label label-default">$1</span>', $str);
$str = preg_replace('~(?<=^| )/r(.*?)(?:<br>|$)~uims', '<font color="red">$1</font><br>', $str);
此处(?<=^| )
是一个lookbehid,表示匹配正则表达式,如果它前面有空格或位于行开头。