找到字符串中的所有字符串并使用它

时间:2013-07-29 10:35:58

标签: php preg-match

我有一个这样的字符串进入我的页面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如何构造此表达式以在@之后取名?

由于

4 个答案:

答案 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

此时我会有两个数组:

  1. $matches - 包含我的模式的所有出现次数
  2. $links - 包含1-1对应中的所有相应链接。
  3. 最后,我将以下列方式使用preg_replace()

    preg_replace($matches, $links, $initial_string);

    这将替换$matches$initial_string中与$links中相应项目匹配的每个项目。

    我希望我帮助过你。也许以后我也能提供一些代码。