За последние 24 часа нас посетили 17744 программиста и 1625 роботов. Сейчас ищут 1280 программистов ...

Нужна сложная регулярка

Тема в разделе "Сделайте за меня", создана пользователем rognorog, 30 окт 2014.

  1. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Никак не могу разобраться, пожалуйста знающие подскажите в какую сторону смотреть:
    Есть вот такая вот шняжка:
    Код (PHP):
    1. {block1}
    2.     1
    3. {/block1 block2}
    4.     2
    5. {/block2 block3}
    6.     3
    7. {/block3}
    Нужно регулярку, так, чтобы они были не зависимы, то есть у нас может быть неопределенное количество блоков.
    А также у нас может быть и просто:
    Код (PHP):
    1. {block1}
    2.     1
    3. {/block1}
    Буду рад любым советам.
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    непонятно что нужно найти регуляркой. границы блоклв, содержимое, все сразу..
     
  3. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Содержимое блоков.
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    и зачем делать себе такой геморой? у КАЖДОГО блока должно быть СВОЁ начало и конец.
     
  5. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Можно более простым регулярным выражением превратить эти блоки в XML, и через DOM получить содержимое.
     
  6. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Нужна эта операция, ппц, как...
    Я даже не знаю как составить так, чтобы она вот это видела и разбирала. Ппц.
    В именно таком геморе(.
    Не получается у меня никак.
    Вот, как - так, сделать, чтобы видело эти фрагменты?
    Хоть какие нибудь бы догадки(
     
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    /}[\S\s]+?{/
     
  8. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Спс, натолкнул...
    /(?<=})[\S\s]+?(?={)/

    Array ( [0] => 1 ) Array ( [0] => 2 ) Array ( [0] => 3 )

    А то у тебя получается:

    Array ( [0] => } 1 { ) Array ( [0] => } 2 { ) Array ( [0] => } 3 { )

    А вот ты еще сказал:
    А это как узнать? Интересно.
     
  9. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    $re = '/[{ ]?([^}]+)}([\S\s]+?){\/\1[ }]/';
    вместе с именами блоков

    Добавлено спустя 1 минуту 43 секунды:
    дальше trim($match, '{}');
     
  10. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Оо... Вообще огонь, вот какраз это и нужно было, круто.