PHP正则表达式模式匹配“@user”无处不在

时间:2013-04-30 21:31:30

标签: php regex preg-replace

这种正则表达式模式让我感到困惑。

我有一个存储在变量中的@tom用户名。我希望在字符串中的任何位置找到匹配@tom的模式;开始,中间或结束。

我的目标是匹配并替换其个人资料页面的链接。我想我已经弄明白了,但它并没有意识到一个词的结尾。当它查找@tom时,它也与@tommy匹配,这不是我想要的。

这是我到目前为止所拥有的:

$pattern = array();
$pattern[0] = '/'.$possible1.'/i';

$replacement = array();
$replacement[0] = '$1<a href="http://banterme.com/'.$possible1user.'">@'.$possible1user.'</a>';

echo preg_replace($pattern, $replacement, $text);

我使用数组是因为我想匹配文本中的所有@(例如:@tom与@inga),而不仅仅是一个。我简化了实际代码,只显示了数组的一部分。

更新:基本上,我正在尝试找出'/'.$possible1.'/i'不匹配的内容(例如)@tom@tommy

3 个答案:

答案 0 :(得分:3)

这个够好吗? /(?!\w)\@tom(?!\w)/
我刚刚添加了界限..

@HamZa DzCyber​​DeV给出的上述评论较短/\@tom(?!\w)/

你可以在这里查看:

http://www.spaweditor.com/scripts/regex/index.php

数据为@tom @tomato @atom @tom

将返回 @tomato @atom

答案 1 :(得分:1)

为什么不直接使用str_replace?

str_replace ("@tom" , "<a href='/users/tom'>@tom</a>" , $text);

这听起来不像你需要正则表达式。

答案 2 :(得分:0)

试试这个

$count = null;
$returnValue = preg_replace('/@([\w]+)[^\w]/', '<href="http://banterme.com/$1">@$1</a> ', '@tom met @dave somewhere', -1, $count);