我对preg_replace有一些问题。 我会改变链接中的提及,但名称不是用户名。 因此,在名称中有空格,我找到了一个很好的解决方案,但我不知道要这样做。 Sostantially我愿意preg_replace
是@
和,
Preg替换为提及
例如之间的话:
@John Doeh, @Jenna Diamond, @Sir Duck Norman
和替换
<a href="user.php?name=VAL">VAL</a>
我该怎么办呢?
我对preg_replace有一些问题。 我会改变链接中的提及,但名称不是用户名。 因此,在名称中有空格,我找到了一个很好的解决方案,但我不知道要这样做。 Sostantially我愿意preg_replace
是@
和,
Preg替换为提及
例如之间的话:
@John Doeh, @Jenna Diamond, @Sir Duck Norman
和替换
<a href="user.php?name=VAL">VAL</a>
我该怎么办呢?
基于我的假设,您想删除以@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
有效的字符?这些都是重要的知识。
我认为你要像:
<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
}
}
两种方法:
<?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;
?>
非常感谢:D – user2156006 2013-03-11 11:54:15
@ user2156006如果答案对你有帮助,试着[接受一个](http://meta.stackexchange.com/a/5235)。如果还有其他问题,请提出一个新问题,而不是添加“答案”,或者如果它们相似,则编辑此答案。 – HamZa 2013-03-11 21:20:53
你想要的输出是什么?你尝试过什么吗? – 2013-03-11 09:07:28
你说在** @和','符号之间替换**。这是否意味着你想保留'@'符号?这对我来说并没有什么意义,因此这个问题。 – w00 2013-03-11 09:08:22
@ user2156006,发表一些代码,这将更好地了解你所尝试的?什么是错误?解释清楚你的输入和预期的输出 – 2013-03-11 09:14:03