Instagram хэштеги и preg_replace - PullRequest
2 голосов
/ 12 мая 2019

Я получаю простой текст описания некоторых постов в Instagram и пытаюсь выделить хэштеги.Я использую этот код:

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

Проблема в том, что это не работает с нелатинскими символами, такими как «ş» или «ö».И вторая проблема: это не работает с хэштегами без пробела, например, между "# quote # quoteoftheday #myquote" - мое регулярное выражение будет выделять только "#quote" и "#myquote".Могу ли я как-то решить эти проблемы в одном регулярном выражении?

1 Ответ

2 голосов
/ 12 мая 2019

Вы можете удалить часть (?<!\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>
...