2013-03-11 102 views
1

我对preg_replace有一些问题。 我会改变链接中的提及,但名称不是用户名。 因此,在名称中有空格,我找到了一个很好的解决方案,但我不知道要这样做。 Sostantially我愿意preg_replace@,Preg替换为提及

例如之间的话:

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

和替换

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

我该怎么办呢?

+1

你想要的输出是什么?你尝试过什么吗? – 2013-03-11 09:07:28

+1

你说在** @和','符号之间替换**。这是否意味着你想保留'@'符号?这对我来说并没有什么意义,因此这个问题。 – w00 2013-03-11 09:08:22

+1

@ user2156006,发表一些代码,这将更好地了解你所尝试的?什么是错误?解释清楚你的输入和预期的输出 – 2013-03-11 09:14:03

回答

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

我认为你要像:

<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 
    } 
} 
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; 

?> 
+0

非常感谢:D – user2156006 2013-03-11 11:54:15

+0

@ user2156006如果答案对你有帮助,试着[接受一个](http://meta.stackexchange.com/a/5235)。如果还有其他问题,请提出一个新问题,而不是添加“答案”,或者如果它们相似,则编辑此答案。 – HamZa 2013-03-11 21:20:53