извлечь bbcode atributte в несколько рядов php - PullRequest
1 голос
/ 02 мая 2020

У меня есть строка в php. Это в формате bbcode.

Мне нужно получить массив значений тега bbcode [MSG][/MSG]

user1,2534,1232

user2,343425,4231

user3,234345,1423

user4,253434,123242

user5,251234,1652

    $string ="
   [MSG='user1, comment: 253434, userid: 1232'] TEXT1[/MSG]

   [MSG='user2, comment: 343425, userid: 4231'] 
   TEXT2
   [/MSG]

   [MSG='user3, comment: 234345, userid: 1423']
    TEXT3
   [/MSG]
   [MSG='user4, comment: 253434, userid: 123242']
   TEXT4
   text 4
   text 4
   [/MSG]

   [MSG='user5, comment: 251234, userid: 1652'] TEXT5[/MSG]
  ";

Это то, что я сделал до сих пор, но безуспешно.

Я просто сосредоточился на этой части [MSG='userx, comment: x, userid: x']

с использованием следующего регулярного выражения, но безуспешно [MSG='(.|n)*']

1 Ответ

0 голосов
/ 02 мая 2020

Вы можете использовать preg_match_all для извлечения данных из тегов MSG, используя это регулярное выражение:

\[\s*MSG\s*=\s*'\s*([^,]+),\s+comment:\s+([^,]+),\s+userid: ([^']+)'\s*\]

, которое захватывает все после ' до первого , в группе 1 ; затем все после comment: до следующего , в группе 2 и все после userid: до закрытия ' в группе 3. В PHP:

preg_match_all("/\[\s*MSG\s*=\s*'\s*([^,]+),\s+comment:\s+([^,]+),\s+userid: ([^']+)'\s*\]/", $string, $matches);
foreach (array_keys($matches[0]) as $key) {
    echo "{$matches[1][$key]},{$matches[2][$key]},{$matches[3][$key]}\n";
}

Выход:

user1,253434,1232
user2,343425,4231
user3,234345,1423
user4,253434,123242
user5,251234,1652

Демонстрация на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...