修改变量字符串

时间:2012-06-07 07:18:47

标签: php string

快速提问,

我有以下字符串,它是一个逗号分隔的标签列表:

$tagcap = "tag1, tag2, tag3";

如何获得如下所示的单个字符串:

$string = "#tag1, #tag2, #tag3;

换句话说,只需在每个单词前加上#?

谢谢!

编辑:

非常感谢,这似乎是完美的,除了它还添加了#带有连字符的单词,例如:自拍成为#self-#shot,我该如何解决这个问题?

编辑2:感谢快速帮助,发布修复!

5 个答案:

答案 0 :(得分:3)

使用正则表达式:

$str = preg_replace('/(\w+)/', '#$1', $str);

<强>更新

要包含-字符,请使用

$str = preg_replace('/([a-z0-9-]+)/i', '#$1', $str);

([a-z0-9]+)与任何字母,数字和-字符匹配的位置。 i标志会使其不区分大小写。

答案 1 :(得分:1)

$tagcap = "tag1, tag2, self-shot";
echo preg_replace( "/([a-z0-9-_]+)/i", "#$1", $tagcap );

哪个输出:

#tag1, #tag2, #self-shot

这是带有散列(#)的任何字母,数字,短划线( - )或下划线的前缀。

演示:http://codepad.org/0WgaZg2L

答案 2 :(得分:0)

试试这个:

$tagcap = "tag1, tag2, tag3";

$tagcap = str_replace("t","#t",$tagcap );
echo $tagcap;

答案 3 :(得分:0)

你也可以使用它,但这是使用php函数的其他替代方法。

<?php
$tagcap = "tag1, tag2, tag3";
$res = explode(',',$tagcap);
$values = array();
foreach($res as $key=>$value){
  if(isset($value)){
  $values[] = '#'.$value;
}

$finalResult = implode('',$values);
echo $finalResult;
}
?>

答案 4 :(得分:0)

这是没有正则表达式的另一种解决方案:

$string = "tag1,tag2,tag3";
function addPrefix(&$item,$key,$prefix)
{
   $item = $prefix.$item;
}

$arr = explode(",",$string);
array_walk($arr,"addPrefix","#");
echo implode($arr,","); //output "#tag1,#tag2,#tag3"