如何在PHP中获取不带特殊字符的UTF-8 Hashtags

问题描述 投票:0回答:2

我在仅提取诸如ä,ö,ü,ß之类的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;
}

这是我当前的解决方案,它接收一个字符串文本,并从中提取主题标签,然后将其返回。问题在于,使用此解决方案还可以像#example!"$/%一样处理主题标签(并且不能像!一样在#example之前被剪切)。

有人使用(Regex)方法从PHP的字符串中提取像UTF-8标签一样干净的Twitter,而没有那些不需要的标点符号吗?

php regex utf-8 hashtag
2个回答
3
投票

使用unicode属性:

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

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


0
投票

您可以在正则表达式下面使用

$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

© www.soinside.com 2019 - 2024. All rights reserved.