快速提问,
我有以下字符串,它是一个逗号分隔的标签列表:
$tagcap = "tag1, tag2, tag3";
我如何去获得一个看起来像这样的字符串:
$string = "#tag1, #tag2, #tag3;
换句话说,只是在每个单词前面加上#?
谢谢!
编辑:
非常感谢,这似乎很完美,除了它还在带有连字符的单词前面添加了一个#,例如:self-shot 变成了#self-#shot,我该如何解决这个问题?
编辑 2:感谢您的快速帮助,问题已解决!
使用正则表达式:
$str = preg_replace('/(\w+)/', '#$1', $str);
更新:
要包含-
char,请使用
$str = preg_replace('/([a-z0-9-]+)/i', '#$1', $str);
Where([a-z0-9]+)
将与任何字母、数字和-
字符匹配。该i
标志将使其不区分大小写。
$tagcap = "tag1, tag2, self-shot";
echo preg_replace( "/([a-z0-9-_]+)/i", "#$1", $tagcap );
哪个输出:
#tag1, #tag2, #self-shot
这会在任何一系列字母、数字、破折号 (-) 或下划线前面加上一个井号 (#)。
试试这个:
$tagcap = "tag1, tag2, tag3";
$tagcap = str_replace("t","#t",$tagcap );
echo $tagcap;
您也可以使用它,但这是使用 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;
}
?>
这是另一个没有正则表达式的解决方案:
$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"