我在preg_replace上遇到了一些问题。
我会更改链接中的提及,但名称不是用户名。
所以在名称中有空格,我找到了一个很好的解决方案,但我不知道这样做。
我最后会preg_replace
@
和,
之间的单词@John Doeh, @Jenna Diamond, @Sir Duck Norman
例如:
<a href="user.php?name=VAL">VAL</a>
并替换为
{{1}}
我该怎么做?
答案 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;
?>