这种正则表达式模式让我感到困惑。
我有一个存储在变量中的@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
。
答案 0 :(得分:3)
这个够好吗? /(?!\w)\@tom(?!\w)/
击>
我刚刚添加了界限..
/\@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);