1

我对 preg_replace 有一些问题。我会更改链接中的提及,但名称不是用户名。所以名称中有空格,我找到了一个很好的解决方案,但我不知道该怎么做。Sostantially 我会说preg_replace介于@和之间的词,

例如:

@John Doeh, @Jenna Diamond, @Sir Duck Norman

并替换为

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

我该怎么做?

4

3 回答 3

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
    }
}
于 2013-03-11T09:19:51.923 回答
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>

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

于 2013-03-11T09:14:58.480 回答
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;

?>
于 2013-03-11T09:39:03.723 回答