За последние 24 часа нас посетили 20124 программиста и 1711 роботов. Сейчас ищут 1425 программистов ...

Помогите разбить строку

Тема в разделе "Регулярные выражения", создана пользователем renych, 12 янв 2011.

  1. renych

    renych Активный пользователь

    С нами с:
    12 янв 2011
    Сообщения:
    7
    Симпатии:
    0
    Имеется строка вида:

    Код (Text):
    1. [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 мне поможет, но не могу понять как.
     
  2. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
  3. renych

    renych Активный пользователь

    С нами с:
    12 янв 2011
    Сообщения:
    7
    Симпатии:
    0
    В самый раз, спасибо.
     
  4. renych

    renych Активный пользователь

    С нами с:
    12 янв 2011
    Сообщения:
    7
    Симпатии:
    0
    Ещё один, более конкретный вопрос:

    есть строка

    Код (Text):
    1. 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):
    1. /Qua:\s?.*\]([0-9]{1,5})\[/
    Говорю, что в начале идёт Qua: с пробелом,
    затем что угодно,
    а затем цифры от одной до пяти штук, внутри квадратных скобок ]([0-9]{1,5})\[

    получаю требуемое число:

    Код (Text):
    1. array (
    2.   0 => ...,
    3.   1 => '38',
    4. )
    и если это всё написать 5 раз подряд:

    Код (Text):
    1. /Qua:\s?.*\]([0-9]{1,5})\[?.*\]([0-9]{1,5})\[?.*\]([0-9]{1,5})\[?.*\]([0-9]{1,5})\[?.*\]([0-9]{1,5})\[/
    То всё работает, и я получаю все 5 чисел

    Код (Text):
    1. array (
    2.   0 => '...,
    3.   1 => '25',
    4.   2 => '26',
    5.   3 => '28',
    6.   4 => '33',
    7.   5 => '38',
    8. )
    Но проблема в том, что количество тегов [color] и чисел между ними заранее неизвестно.
    Т.е. известно что их может быть от 0 до 5.
    И если например встретится строка с 4-мя тэгами [color], такое выражение не сработает
    Подскажите, как правильно написать? Спасибо.

    Кстати вот правильный тестировщик для preg_match() в нём и проверяю.
     
  5. vodorod

    vodorod Активный пользователь

    С нами с:
    10 янв 2011
    Сообщения:
    217
    Симпатии:
    0
    Посчитать теги color и и через цикл записать регулярное выражение
     
  6. Jampire

    Jampire Активный пользователь

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    PHP:
    1. if (stripos($str, "Qua:") !== false)    {
    2.     preg_match_all('/\[color=[^\]]*\](.*?)\[\/color\]/s', $str, $matсhes);
    3. }
    4. print_r($matches[1]);