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