Имеется строка вида: Код (Text): [li]Уровень: 30[/li][li]Требует 25[/li][li]Сторона: [span class=icon-alliance]Значение[/span][/li][li][icon name=quest_start]Начало: [url=/object=61]Значение 2[/url][/icon][/li][li][icon name=quest_end]Конец: [url=/npc=268]Значение 3[/url][/icon][/li][li]Раздается[/li][li]Сложность: [color=q10]25[/color][small][/small][color=r1]26[/color][small] [/small][color=r2]28[/color][small] Помогите разбить на куски, удаляя всё что в квадратных скобках и сами скобки. Спасибо. P.S. Сделал в цикле с substr и strpos но получилась невменяемая конструкция. Знаю, что split мне поможет, но не могу понять как.
Ещё один, более конкретный вопрос: есть строка Код (Text): Qua: [color=q10]25[/color][small] nbsp;[/small][color=r1]26[/color][small] nbsp;[/small][color=r2]28[/color][small] nbsp;[/small][color=r3]33[/color][small] nbsp;[/small][color=r4]38[/color] 1. Нужно поймать её среди прочих (отличает её набор символов Qua: в начале строки 2. Нужно получить числа внутри тегов [color] (числа могут быть 1-5 значными) Делаю так: Код (Text): /Qua:\s?.*\]([0-9]{1,5})\[/ Говорю, что в начале идёт Qua: с пробелом, затем что угодно, а затем цифры от одной до пяти штук, внутри квадратных скобок ]([0-9]{1,5})\[ получаю требуемое число: Код (Text): array ( 0 => ..., 1 => '38', ) и если это всё написать 5 раз подряд: Код (Text): /Qua:\s?.*\]([0-9]{1,5})\[?.*\]([0-9]{1,5})\[?.*\]([0-9]{1,5})\[?.*\]([0-9]{1,5})\[?.*\]([0-9]{1,5})\[/ То всё работает, и я получаю все 5 чисел Код (Text): array ( 0 => '..., 1 => '25', 2 => '26', 3 => '28', 4 => '33', 5 => '38', ) Но проблема в том, что количество тегов [color] и чисел между ними заранее неизвестно. Т.е. известно что их может быть от 0 до 5. И если например встретится строка с 4-мя тэгами [color], такое выражение не сработает Подскажите, как правильно написать? Спасибо. Кстати вот правильный тестировщик для preg_match() в нём и проверяю.
PHP: if (stripos($str, "Qua:") !== false) { preg_match_all('/\[color=[^\]]*\](.*?)\[\/color\]/s', $str, $matсhes); } print_r($matches[1]);