查找并替换以某些字符开头的文本中的所有字符串

时间:2014-03-07 02:17:58

标签: php

我试图允许用户链接到他们自己的墙柱内的其他墙柱。例如,如果用户输入:请参阅帖子:: 35了解更多信息我会将字符串更改为:有关详细信息,请参阅<a href="posts/35">35</a>

我有以下功能,它从内容中抓取所有帖子编号,如::开头所示。

function getBetween($content, $start, $end, $rest = array()) {
    $r = explode($start, $content, 2);
    if (isset($r[1])) {
        $r = explode($end, $r[1], 2);
        $rest[] = $r[0];
        return getBetween($r[1], $start, $end, $rest);
    } else {
        return $rest;
    }
}

$post = 'Lorem ::35 ipsum ::36 dolor sit ::37 ::38';
$links = getBetween($post, '##', ' ');

$ links返回一个包含35,36,37,38的数组。我不知道如何用原始字符串中的超链接替换它们。

2 个答案:

答案 0 :(得分:1)

此代码会找到::digit,其旁边是空格或显示在文本的开头或结尾。

$post = 'Lorem ::35 ipsum ::36 dolor sit ::37 ::38';
$post = preg_replace('/(\G|\s+|^)::(\d+)((?=\s+)|(?=::)|$)/','$1 <a href="?postid=$2">$2</a> $3',$post);
echo $post;

// Lorem <a href="?postid=35">35</a> ipsum <a href="?postid=36">36</a> dolor sit <a href="?postid=37">37</a> <a href="?postid=38">38</a>

答案 1 :(得分:0)

如果您的帖子链接类似

  

http://example.com/post/POSTID

  

http://example.com/viewpost.php?postid=POSTID

您可以使用preg_replace立即替换它,例如

  

$ result = preg_replace('/ ::(\ d +)/','http://example.com/viewpost.php?postid= $ 1',$ content)