要查找所有哈希标记,请使用正则表达式 and preg_match_all()
,并使用 进行替换preg_replace()
:
$regex = '/(#[A-Za-z-]+)/';
preg_match_all( $regex, $string, $matches);
$string_f = preg_replace( $regex, "<a href='#'>$1</a>", $string);
然后所有标签都在一个数组中$matches[1]
:
$tags_array = $matches[1];
implode()
然后,使用and将其转换为以空格分隔的列表array_unique()
:
$tags = implode( ' ', array_unique( $tags_array));
你完成了。您可以从这个演示中看到,$tags
并且$string_f
是:
"#hashtag #another #example"
"Hello. This is a <a href='#'>#hashtag</a> and this is yet another <a href='#'>#hashtag</a>. This is <a href='#'>#another</a> <a href='#'>#example</a>."
对于主题标签中的其他字符(例如,数字),请$regex
适当修改。
编辑:但是,如果您使用和闭包,这可以提高效率,preg_replace_callback()
因此您只需执行一次正则表达式,如下所示:
$tags_array = array();
$string_f = preg_replace_callback( '/(#[A-Za-z-]+)/', function( $match) use( &$tags_array) {
$tags_array[] = $match[1];
return "<a href='#'>" . $match[1] . "</a>";
}, $string);
$tags = implode( ' ', array_unique( $tags_array));