Получить список слов через карманы в регулярном выражении

106
14 января 2021, 00:00

В тексте есть следующая группа символов:

:arrow_lower_left:arrow_upper_left:black_small_square: 
или :arrow_lower_left:

Нужно как-то достать каждое слово без двоеточий через карманы. Пробовал следующее регулярное выражение:

:(?:([a-z_]+):)+

Но в результате сохраняется только последнее слово. Что я делаю не так?

Answer 1
$str = ':arrow_lower_left:arrow_upper_left:black_small_square: ';
preg_match_all(
    '/(?<=:) # проверка на наличие двоеточия перед захватывающей скобкой
      ([a-z_]+) # захват "слова" (можно даже убрать скобки)
      (?=:) # проверка на наличие двоеточия после захватывающей скобки
     /x',
    $str,
    $found
);
var_dump($found);

См. также

  • Функция preg-match-all
  • Регулярные выражения. Утверждения
Answer 2

Всё по существу и ничего лишнего:

$str = ':arrow_lower_left:arrow_upper_left:black_small_square:';
preg_match_all('~:\K[^:]+~', $str, $arr);
var_dump($arr[0]);

Результат:

array (size=3)
  0 => string 'arrow_lower_left' (length=16)
  1 => string 'arrow_upper_left' (length=16)
  2 => string 'black_small_square' (length=18)

Демо PHP
Демо REGEXP

READ ALSO
При получении данных из MS SQL sqlsrv данные &ldquo;varchar&rdquo; длиннее 16-17 символов не отдаются

При получении данных из MS SQL sqlsrv данные “varchar” длиннее 16-17 символов не отдаются

OwnerName - это колонка с фамилиями VarcharПри заполнении массива всегда останавливается на самой длинной фамилии (опытным путем вычислил, что более...

90
Утечка памяти phpQuery. Как исправить?

Утечка памяти phpQuery. Как исправить?

Есть функция, которая, используя библиотеку phpQuery, парсит данные со страницы на сайтеДанные на странице обновляются регулярно, поэтому функция...

109
Не отправляется форма HTML+PHP

Не отправляется форма HTML+PHP

Никак не могу разобраться в проблеме отправки формы: нажимаю Save и не отправляется

89
PHP выделение блоков из текста по ключу

PHP выделение блоков из текста по ключу

Доброе время суток! Требуется помощь, есть данные которые приходят из формы, пример данных:

79