快速提问,
我有以下字符串,它是一个逗号分隔的标签列表:
$tagcap = "tag1, tag2, tag3";
如何获得如下所示的单个字符串:
$string = "#tag1, #tag2, #tag3;
换句话说,只需在每个单词前加上#?
谢谢!
编辑:
非常感谢,这似乎是完美的,除了它还添加了#带有连字符的单词,例如:自拍成为#self-#shot,我该如何解决这个问题?
编辑2:感谢快速帮助,发布修复!
答案 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
这是带有散列(#)的任何字母,数字,短划线( - )或下划线的前缀。
答案 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"