preg_match и UTF-8 в PHP делают хэштег

У меня есть этот код:

$text= "#h #gg #مصر";
$get_hash = preg_match_all("/(^|\s)#(\w*[a-zA-Z-أ-إ-آ-ا-ب-ت-ث-ج-ح-خ-د-ذ-ر-ز-س-ش-ص-ض-ط-ظ-ع-غ-ف-ق-ك-ل-م-ن-ه-و-لا-لا-لآ-لأ-لإ-ى-ي-ئ-ة-ء-ؤ_]+\w*)/", $text, $matches);
$array_hash = implode("",$matches[0]).""; 
$hash = str_replace('#', ', ', $array_hash);
echo "hash (".$hash.")<br />";
echo $text;

Результат:

hash (, h , gg)
#h #gg #مصر

Я хочу такой результат:

hash (, h , gg , مصر)
#h #gg #مصر

2 ответа

Чтобы взять все, что в UTF-8, мы используем это [^ \"\n\r\t<]*

Я знаю, что уже слишком поздно, чтобы другие знали

я изменяю эту функцию, чтобы разрешить арабские символы

как пара

 function get_hashtags($string, $str = 1) {
 preg_match_all('/#(\w*[a-zA-Z-أ-إ-آ-ا-ب-ت-ث-ج-ح-خ-د-ذ-ر-ز-س-ش-ص-ض-ط-ظ-ع-غ-ف-ق-ك-ل-م-ن-ه-و-لا-لا-لآ-لأ-لإ-ى-ي-ئ-ة-ء-ؤ_]+)/',$string,$matches);

  $i = 0;
  if ($str) {
   foreach ($matches[1] as $match) {
   $count = count($matches[1]);
   $keywords .= "$match";
    $i++;
    if ($count > $i) $keywords .= ", ";
   }
  } else {
  foreach ($matches[1] as $match) {
  $keyword[] = $match;
  }
  $keywords = $keyword;
 }
return $keywords;
}

использование:

    $string = "<p>#عاشت #فلسطين حرة عربية يوجد 2 هاشتاج لازم اشوفهم في الداتا بيز</p>";
$myArray = get_hashtags($string, $str = 0);
 $max = sizeof($myArray);
for($i = 0; $i < $max;$i++)
{
 echo "#".$myArray[$i]."<br />";
}
echo "$string"

результат

#عاشت
#فلسطين
#عاشت #فلسطين حرة عربية يوجد 2 هاشتاج لازم اشوفهم في الداتا بيز
Другие вопросы по тегам