Preg_replace与提及

时间:2013-03-11 09:02:05

标签: php preg-replace

我在preg_replace上遇到了一些问题。 我会更改链接中的提及,但名称不是用户名。 所以在名称中有空格,我找到了一个很好的解决方案,但我不知道这样做。 我最后会preg_replace @,之间的单词@John Doeh, @Jenna Diamond, @Sir Duck Norman

例如:

<a href="user.php?name=VAL">VAL</a>

并替换为

{{1}}

我该怎么做?

3 个答案:

答案 0 :(得分:1)

根据我的假设,您希望删除以@Some Name,开头的@Some Name, this is a message开头的字符串。

然后将其替换为href,例如:<a href="user.php?name=First_Name">First_Name</a>

如果是这种情况,则以下正则表达式将执行:

$str = '@First_Name, say something';
echo preg_replace ( '/@([[:alnum:]\-_ ]+),.*/', '<a href="user.php?name=$1">$1</a>', $str );

将输出:

<a href="user.php?name=First_Name">First_Name</a>

我还添加了对数字,下划线和破折号的支持。这些名称是否有效?在@User Name中有效的任何其他字符?这些都是重要的事情。

答案 1 :(得分:1)

我认为你想要它:

<a href="user.php?name=John Doeh">John Doeh</a>

对于此尝试:

$myString="@John Doeh, @Jenna Diamond, @Sir Duck Norman";
foreach(explode(',',$myString) as $str)
{
    if (preg_match("/\\s/", $str)) {
        $val=str_replace("@","",trim($str));
        echo "<a href='user.php?name=".$val."'>".$val."</a>";
        // there are spaces
    }
}

答案 2 :(得分:0)

两种方法:

<?php

// preg_replace method
$string = '@John Doeh, @Jenna Diamond, @Sir Duck Norman';
$result = preg_replace('/@([\w\s]+),?/', '<a href="user.php?name=$1">$1</a>', $string);
echo $result . "<br>\n";

// explode method
$arr = explode(',', $string);
$result2 = '';
foreach($arr as $name){
    $name = trim($name, '@ ');
    $result2 .= '<a href="user.php?name='.$name.'">'.$name.'</a> ';
}
echo $result2;

?>