我有一个这样的字符串进入我的页面php:
$string = 'this is a test for @john and I can do all @mike';
我想在@
之后使用此字符串查找其中的所有字符串,并使用它来查找具有该用户ID的用户的名称(如果存在)并转换为链接以使其成为如下所示:
$string = 'this is a test for <a href="/user?id=111">@john</a> and I can do all <a href="/user?id=112">@mike</a>';
如何获取所有字符串并使用它来查找该用户的id并在用链接替换原始字符串之后?
我知道使用preg_match
我可以在其中包含字符串,但如何使用此字符串? ando如何构造此表达式以在@
之后取名?
由于
答案 0 :(得分:1)
如果你有一个函数,比如link()
,它接受字符串john
并返回相应的链接:
preg_replace_callback('/@(\w+)/', function($matches) {
return link($matches[1]);
}, $string);
或者,对于较旧的PHP版本:
preg_replace('/@(\w+)/e', 'link(\'$1\')', $string);
答案 1 :(得分:1)
我会使用preg_match_all
以下代码将从字符串开始用@
提取每个单词并将其返回到名为$matches
的数组中。然后,您可以循环遍历数组,将其与调节相比较,以满足您的需求。
$string = 'this is a test for @john and I can do all @mike';
preg_match_all('/(?!\b)(@\w+\b)/', $string, $matches);
答案 2 :(得分:0)
$string = 'this is a test for @john and I can do all @mike';
$result = preg_replace('/([^@]+)([^\s]+)/simx', '$1<a href="yourlink">$2</a>', $string);
echo $result;
<强>输出强>
this is a test for <a href="yourlink">@john</a> and I can do all <a href="yourlink">@mike</a>
答案 3 :(得分:0)
我会使用preg_match_all()
函数。
之后我会遍历匹配并检索它们的ID,然后为每个匹配生成适当的链接,将它们存储在一个数组中,让它称之为$links
。
此时我会有两个数组:
$matches
- 包含我的模式的所有出现次数$links
- 包含1-1对应中的所有相应链接。最后,我将以下列方式使用preg_replace()
:
preg_replace($matches, $links, $initial_string);
这将替换$matches
中$initial_string
中与$links
中相应项目匹配的每个项目。
我希望我帮助过你。也许以后我也能提供一些代码。