2015-04-20 5 views
0

У меня есть проблема, извлекая только UTF-8 символов, как ä,ö,ü,ß (скажем, буквы, которые используются в словах) без символов, как !"§$%&/()+' и т.д.Как получить UTF-8 Hashtags без специальных символов в PHP

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) для извлечения твиттера, такого как хэштеги UTF-8, без этих нежелательных символов пунктуации из строки в PHP?

+0

Как насчет ''/(? <=^| \\ P {L}) # \\ b \\ p {L} + \\ b/u "'? https://regex101.com/r/qP5oI9/3 –

+1

Итак, какие именно символы * разрешены и которые * запрещены *? «Специальные символы» - это не вещь. Вы имеете в виду * письма против пунктуации *? Или что-то другое? – deceze

ответ

3

Использование Юникода свойство:

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

\p{L} стенды для любого письма на любом языке.

+0

Если вы следуете правилам Twitter, хэштег может включать в себя символ подчеркивания и не начинаться с числа. '/ (? <=^| \ P {L}) (# \ b \ p {L} [\ p {L} \ d_] +)/u', кажется, работает хорошо. –