Php preg_replace#hashtags-非alpa数字

Php preg_replace#hashtags-非alpa数字,php,preg-replace,Php,Preg Replace,我对以下代码有问题: $input = '#2weeksago #1year&2weeksold #keyword'; $output = preg_replace('/(?:.^|\s)#(\w+)/', ' <span class="hashtag">#$1</span>', $input); print($output); $input='#2周前#1年和2周前#关键字'; $output=preg_replace('/(?:.

我对以下代码有问题:

    $input = '#2weeksago #1year&2weeksold #keyword';

    $output = preg_replace('/(?:.^|\s)#(\w+)/', ' <span class="hashtag">#$1</span>', $input);

    print($output);
$input='#2周前#1年和2周前#关键字';
$output=preg_replace('/(?:.^|\s)#(\w+/),'#$1',$input);
打印(输出);
我希望每个单词都包含在一个带有span属性的标签中。 这适用于大多数关键字,但带有符号的哈希标记不起作用

输出

 <span class="hashtag">#2weeksago</span> <span class="hashtag">#1year</span>&2weeksold <span class="hashtag">#keyword</span>
#2周前#1年和2周前#关键字

有人能帮我扩大这个计划吗

如果您不想在“单词边界”处突破,而是继续匹配到下一个空白字符,那么您需要完全做到这一点:

<?php
$input = '#2weeksago #1year&2weeksold #keyword';
$output = preg_replace('/(?:.^|\s|^)#([^\s]+)/', ' <span class="hashtag">#$1</span>', $input);
print($output);

期望的结果是什么,以及如何定义“单词”开始?这正是我需要的!谢谢
<span class="hashtag">#2weeksago</span> <span class="hashtag">#1year&2weeksold</span> <span class="hashtag">#keyword</span>