我对 preg_replace 有一些问题。我会更改链接中的提及,但名称不是用户名。所以名称中有空格,我找到了一个很好的解决方案,但我不知道该怎么做。Sostantially 我会说preg_replace
介于@
和之间的词,
例如:
@John Doeh, @Jenna Diamond, @Sir Duck Norman
并替换为
<a href="user.php?name=VAL">VAL</a>
我该怎么做?
我对 preg_replace 有一些问题。我会更改链接中的提及,但名称不是用户名。所以名称中有空格,我找到了一个很好的解决方案,但我不知道该怎么做。Sostantially 我会说preg_replace
介于@
和之间的词,
例如:
@John Doeh, @Jenna Diamond, @Sir Duck Norman
并替换为
<a href="user.php?name=VAL">VAL</a>
我该怎么做?
我认为你想要它:
<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
}
}
根据我的假设,您希望删除@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
?这些是重要的事情要知道。
两种方法:
<?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;
?>