正则表达式为Hash标签但没有#in href

时间:2014-03-02 14:43:04

标签: php regex

我尝试了什么

http://regexr.com?38d9s

#\w+匹配以#

开头的任何字母数字

并将其替换为:

<a href="/$&" />$&</a>

我想摆脱标签的href区域中的#并将其保留为链接文本,即在开始和结束标记之间。请查看以下示例。

我想要什么

如果句子是:

  

Lorem ipsum #set amet #dolor

然后,我希望输出为:

Lorem ipsum <a href="/set">#set</a> amet <a href="/dolor">#dolor</a>

我使用preg_replace()而没有任何分隔符。

我已经拥有的东西:

preg_replace('/(?<=#)\w+/', '<a href="/\\0" />\\0</a>', $comment)

它给了我:

Lorem ipsum #<a href="/set">set</a> amet #<a href="/dolor">dolor</a>

而不是

Lorem ipsum <a href="/set">#set</a> amet <a href="/dolor">#dolor</a>

注意#

的位置

2 个答案:

答案 0 :(得分:2)

使用捕获组。

替换:

#(\w+)

<a href="/$1" />$&</a>

$1将替换为捕获的第1组(单词部分)


在PHP中:

$replaced = preg_replace('/#(\w+)/', '<a href="/\1" />\0</a>',
                         $sentence);

答案 1 :(得分:0)

$replaced=preg_replace("/\#([\w\d]+)/ui",'<a href="/\1">\0</a>',$text);

我建议你用这个。在falsetru的答案中,他正在使用\ w。这意味着它只能匹配英语中的字母数字字符。如果你使用\ w \ d,它将匹配以#。开头的所有utf-8字符。