У меня есть строка, в которой есть хэш-теги, и я пытаюсь вытащить теги. Я думаю, что я довольно близко, но получаю многомерный массив с одинаковыми результатами
$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 )