我收到一些Instagram帖子的简单描述文字,并尝试突出显示主题标签。我使用以下代码:
$caption = preg_replace('/(?<!\S)#([0-9a-zA-Z_.]+)/', '<a href="/tag/$1">#$1</a>', $caption);
问题是:这不适用于非拉丁字符,例如“ş”或“ö”。第二个问题:这不适用于主题标签,例如“#quote#quoteoftheday #myquote”之间没有空格-我的正则表达式将仅突出显示“ #quote”和“ #myquote”。我可以通过一个正则表达式以某种方式解决这些问题吗?
答案 0 :(得分:2)
您可以删除(?<!\S)
部分,以便在#中有非空格字符时也可以匹配,并添加unicode标志/u
。
您可以将0-9a-zA-Z_
缩短为\w
,以便您的表情看起来像:
#([\w.]+)
$caption = "#quote#öquoteoftheday #şmyquote";
$caption = preg_replace('/#([\w.]+)/u', '<a href="/tag/$1">#$1</a>', $caption);
echo $caption;
结果:
<a href="/tag/quote">#quote</a><a href="/tag/öquoteoftheday">#öquoteoftheday</a> <a href="/tag/şmyquote">#şmyquote</a>