Stanislav108
@Stanislav108

PHP. Получить бб-теги из текста регуляркой. Что не так?

Есть пример текста:
[BB1:description]data[/BB1] asdfasf [BB2]data[/BB2] asfasfasf [BB3:description]data [BB4]data[/BB4] asfasfasf [/BB3] asfasfasf


Нужно из него дернуть теги (заголовки), их содержимое и описание.

Написал:
$text = '[BB1:description]data[/BB1] asdfasf [BB2]data[/BB2] asfasfasf [BB3:description]data [BB4]data[/BB4] asfasfasf [/BB3] asfasfasf ';
$pattern = "/\[(\w+)(?:[\:]([\w]+))?\](.*)\[\/\1\]/iu";
preg_match_all($pattern, $text, $matches);
print_r($matches);


На regex101.com все работает. В пхп, получаю:
Array
(
[0] => Array
(
)

[1] => Array
(
)

[2] => Array
(
)

[3] => Array
(
)

)


Почему пустой вывод? Что не так?
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
Stanislav108
@Stanislav108 Автор вопроса
После еще некоторых экспериментов нашел решение:
"/\[(\w+)(?:[\:]([\w]+))?\](.*)\[\/\\1\]/iu"

(два слеша, вместо одного = \\1)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@djay
OpenServer, версия PHP 5.6:

$text = '[BB1:description]data[/BB1] asdfasf [BB2]data[/BB2] asfasfasf [BB3:description]data [BB4]data[/BB4] asfasfasf [/BB3] asfasfasf';
$pattern = '/\[(\w+)(?:[\:]([\w]+))?\](.*)\[\/\1\]/iu';

preg_match($pattern, $text, $matches);

print_r($matches);


Результат:

Array
(
    [0] => [BB1:description]data[/BB1]
    [1] => BB1
    [2] => description
    [3] => data
)


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

Войдите, чтобы написать ответ

Похожие вопросы