如何在 PHP 中获取没有特殊字符的 UTF-8 标签

How to get UTF-8 Hashtags without special chars in PHP

我在仅提取像 ä,ö,ü,ß 这样的 UTF-8 字母时遇到了问题(比如在单词中使用的字母),而没有像 !"§$%&/()+' 等字符

  function getHashtags($string)
{
    $string = html_entity_decode($string, ENT_QUOTES, "utf-8");
    preg_match_all('/(\#)([^\s]+)/u', $string, $matches);
    if ($matches) {
        $hashtagsArray = array_count_values($matches[0]);
        $hashtags = array_keys($hashtagsArray);
        $hashtagLine = '';
        foreach ($hashtags as $hashs) {
            $hashs = strtolower(trim($hashs));
            $hashtagLine .= $hashs;
        }
    }
    return $hashtagLine;
}

这是我目前的解决方案,它接收一个字符串文本并从中提取主题标签,然后 returns 将它们排成一行。问题是,使用此解决方案,主题标签也像 #example!"$/% 一样被处理(而不是像 #example 那样在 ! 之前被剪切)。

是否有人有一种(正则表达式)方法可以从 PHP 中的字符串中干净地提取 twitter 之类的 UTF-8 主题标签,而没有那些不需要的标点符号?

使用 unicode 属性:

preg_match_all('/#(\p{L}+)/u', $string, $matches);

\p{L}代表任何语言的任何字母。

你可以使用下面的正则表达式

$regex = "(?:#)([\p{L}\p{N}_](?:(?:[\p{L}\p{N}_]|(?:\.(?!\.))){0,28}(?:[\p{L}\p{N}_]))?)";

它的工作原理类似于 Facebook 和 Instagram 主题标签。

github 中的要点:https://gist.github.com/khanzadimahdi/2ecfe1ba38860db132b4543ab5126926

并使用以下链接进行测试:

https://regexr.com/4suqt

https://regex101.com/r/4SAxik/1

https://www.regexpal.com/?fam=113956