Intereting Posts

Как извлечь слова, начиная с хэш-тега (#) из строки в массив

У меня есть строка, в которой есть хэш-теги, и я пытаюсь вытащить теги. Я думаю, что я довольно близко, но получаю многомерный массив с одинаковыми результатами

$string = "this is #a string with #some sweet #hash tags"; preg_match_all('/(?!\b)(#\w+\b)/',$string,$matches); print_r($matches); 

который дает

  Array ( [0] => Array ( [0] => "#a" [1] => "#some" [2] => "#hash" ) [1] => Array ( [0] => "#a" [1] => "#some" [2] => "#hash" ) ) 

Мне просто нужен один массив с каждым словом, начинающимся с хэш-тега.

это можно сделать с помощью /(?<!\w)#\w+/ regx, он будет работать

Это то, что делает preg_match_all . Вы всегда получаете многомерный массив. [0] – полное совпадение, а [1] – список результатов первых групп захвата.

Просто получите $matches[1] для нужных строк. (Ваш дамп с изображенным посторонним Array ( [0] => Array ( [0] был неправильным. У вас есть один уровень подмашины.)

Я думаю, что эта функция поможет вам:

 echo get_hashtags($string); function get_hashtags($string, $str = 1) { preg_match_all('/#(\w+)/',$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 = "this is #a string with #some sweet #hash tags"; preg_match_all('/(?<!\w)#\S+/', $string, $matches); print_r($matches[0]); echo("<br><br>"); // Output: Array ( [0] => #a [1] => #some [2] => #hash ) на $string = "this is #a string with #some sweet #hash tags"; preg_match_all('/(?<!\w)#\S+/', $string, $matches); print_r($matches[0]); echo("<br><br>"); // Output: Array ( [0] => #a [1] => #some [2] => #hash )