0

快速提问,

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

$tagcap = "tag1, tag2, tag3";

我如何去获得一个看起来像这样的字符串:

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

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

谢谢!

编辑:

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

编辑 2:感谢您的快速帮助,问题已解决!

4

5 回答 5

3

使用正则表达式:

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

更新:

要包含-char,请使用

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

Where([a-z0-9]+)将与任何字母、数字和-字符匹配。该i标志将使其不区分大小写。

于 2012-06-07T07:21:44.930 回答
1
$tagcap = "tag1, tag2, self-shot";
echo preg_replace( "/([a-z0-9-_]+)/i", "#$1", $tagcap );

哪个输出:

#tag1, #tag2, #self-shot

这会在任何一系列字母、数字、破折号 (-) 或下划线前面加上一个井号 (#)。

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

于 2012-06-07T07:26:45.463 回答
0

试试这个:

$tagcap = "tag1, tag2, tag3";

$tagcap = str_replace("t","#t",$tagcap );
echo $tagcap;
于 2012-06-07T07:25:26.257 回答
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;
}
?>
于 2012-06-07T07:31:01.093 回答
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"
于 2012-06-07T07:41:09.823 回答