Помогите с регулярным выражением

Leonid

PHP? нет, не слышал...
Помогите с регулярным выражением

Есть текст (берется из файла)

block1
{

содержание 1 блока, html-теги, несколько строк

}

block2
{

содержание 2 блока, html-теги, несколько строк

}

block3
{

содержание 3 блока, html-теги, несколько строк

}


надо например вытащить содержание блока 1, т.е. все что между фигурными скобками.

Пытался написать сам, но что-то видимо моя логика не совпадает с логикой регулярных выражений :)

PHP:
preg_match_all("/^block1+[^{]*+{+(.*)+}$/Ums",
    	$template, 
    	$out, PREG_PATTERN_ORDER);
т.е. сначала block1 потом любые символы (переносы строки, пробелы) но не {, затем { любые символы (само содержание блока), затем }.....
 

Leonid

PHP? нет, не слышал...
описание preg_match_all смотрел здесь
http://www.softtime.ru/dic/id_group=3&id_dic=136

-~{}~ 05.06.07 10:09:

Плюсы, ну я так понял что это для соединения частей шаблона...
 

Grezz

Новичок
а компания из strpos и substr разве не шустрее и проще?
 

Leonid

PHP? нет, не слышал...
а компания из strpos и substr разве не шустрее и проще?

Объясняю. block1, block3 - это только для примера. Могут быть любые другие названия. И функция, которая будет выбирать содержимое блока, знает только его название, а какие блоки до этого или после него неизвестно... По этому strpos и не подойдет....
 

zerkms

TDD infected
Команда форума
Leonid
ищешь любое название. например block1
затем производишь поиск первой { после block1
затем - первой } после block1
после этих операций у тебя на руках 2 перемнные, по ним делаешь substr
 

Grezz

Новичок
нутак без проблем, ищем название блока (название-то его нам известно) и далее танцуем от него - ищем открывающую и закрывающую скобки от позиции заданного блока, благо у strpos есть третий необязательный параметр который и задает с какой позиции искать.
 

Фанат

oncle terrible
Команда форума
Плюсы, ну я так понял что это для соединения частей шаблона...
ну-ну
в общем, так. идешь, и получаешь начальные сведения о регулярных выражениях
PHP FAQ: Регулярные выражения.
после этого составляешь свое, и если что-то снова не получается - приходишь
 

Leonid

PHP? нет, не слышал...
Фанат , да, насчет плюсов это я что-то ступил. Признаю

-~{}~ 05.06.07 10:36:

Просто давно не писал рег. выражений
 

Фанат

oncle terrible
Команда форума
Вот и освежи в памяти. Тем более, что пхпклуб располагает прекрасным материалом для начинающих.
 

Leonid

PHP? нет, не слышал...
В общем я сделал с помощью strpos... но возникла одна проблема... если слово block1 стоит в самом начале файла, то оно не находится, а если вставить перед ним пробел или пустую строку, то все нормально....
 

Slavicos

Новичок
Автор оригинала: Leonid
если слово block1 стоит в самом начале файла, то оно не находится
а как ты это понял? проверял?

http://ru2.php.net/manual/ru/function.strpos.php
Внимание
Эта функция может возвращать как логическое значение FALSE, так и не относящееся к логическому типу значение, которое приводится к FALSE, например, 0 или "". За более подробной информации обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
 

Grezz

Новичок
Автор оригинала: Leonid
В общем я сделал с помощью strpos... но возникла одна проблема... если слово block1 стоит в самом начале файла, то оно не находится, а если вставить перед ним пробел или пустую строку, то все нормально....
быть такого не может, значит либо начальное смещение не 0 поставил, либо неверно интерпретируешь возвращаемый результат
 

Leonid

PHP? нет, не слышал...
Да, конечно проверял. Текст, по которому ищутся блоки берется из текстового файла. Так вот, если название блока в самом начале, то strpos Возвращает false
 

Фанат

oncle terrible
Команда форума
документацию читай.
ты научишься это когда-нибудь делать?
 

Фанат

oncle terrible
Команда форума
Slavicos
Не ты первый, кто убеждается, что настоящему ламеру можно и мануал скопировать, и на блюдечко с голубой каемочкой положить, и попку подтереть - но все это будет бесполезно.

Береги бисер, мальчик мой. Он тебе еще пригодится.
 
Сверху