我在仅提取诸如ä,ö,ü,ß
之类的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,而没有那些不需要的标点符号吗?
使用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
并使用以下链接对其进行测试: