RegEx:仅在字符串之前没有空格或空格时才启动

时间:2014-07-30 11:25:20

标签: php regex

我对正则表达式不好而且我被困在这里,我发现了一些链接,遗憾的是它没有用。

$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]+)/"

1 个答案:

答案 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,表示匹配正则表达式,如果它前面有空格或位于行开头。