Instagram主题标签和preg_replace

时间:2019-05-12 10:11:47

标签: php regex preg-replace

我收到一些Instagram帖子的简单描述文字,并尝试突出显示主题标签。我使用以下代码:

 $caption = preg_replace('/(?<!\S)#([0-9a-zA-Z_.]+)/', '<a href="/tag/$1">#$1</a>', $caption);

问题是:这不适用于非拉丁字符,例如“ş”或“ö”。第二个问题:这不适用于主题标签,例如“#quote#quoteoftheday #myquote”之间没有空格-我的正则表达式将仅突出显示“ #quote”和“ #myquote”。我可以通过一个正则表达式以某种方式解决这些问题吗?

1 个答案:

答案 0 :(得分:2)

您可以删除(?<!\S)部分,以便在#中有非空格字符时也可以匹配,并添加unicode标志/u

您可以将0-9a-zA-Z_缩短为\w,以便您的表情看起来像:

#([\w.]+)

Regex demo

$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>