Задача такая
составил регулярку такого вида
preg_match_all('#^\[main\](?:[\s]*)(?:\[row\](.*)\[\/row\]\[value\](.*)\[\/value\](?:[\s]*))+\[\/main\](.*)$#s', $row_product['description'], $description);
var_dump($description);
есть входной текст
[main]
[row]Количество страниц[/row][value]48[/value]
[row]Количество стр[/row][value]482[/value]
[/main]
Графы журнала:
№ записи
Дата проверки знаний
Фамилия, инициалы проверяемого лица
Название правил, стандартов, инструкций
Фамилии членов комиссии или проверяющих лиц (графа заполняется для каждого лица)
Подписи членов комиссии или проверяющих лиц
Подпись проверяемого лица
Смысл в том, чтобы достать из тегов [row][/row] строку и из тегов [value][/value] тоже, а то, что после тега [/main] сохранить.
результат моей регулярк можно глянуть тут
Хелп ми!
Спустя 1 час, 6 минут, 58 секунд (23.02.2012 - 20:04) dadli написал(а):
nugle
так не саидёт?
так не саидёт?
preg_match_all("#(?:(?U)\[row\](.+)\[/row\](?-U)|(?U)\[value\](.+)\[/value\](?-U)|\[/main\](.+))#ius",$str,$mas);
$row = preg_grep("#.+#ius",$mas[1]); // array
$value = preg_grep("#.+#ius",$mas[2]); // array
$posle_main = implode("",preg_grep("#.+#ius",$mas[3])); // строка
Спустя 4 минуты, 5 секунд (23.02.2012 - 20:08) nugle написал(а):
пишет совпадений не найдено по первой твоей регулярке
Спустя 4 минуты, 17 секунд (23.02.2012 - 20:12) dadli написал(а):
nugle
вот смотри
вот смотри
$str = '[main]
[row]Количество страниц[/row][value]48[/value]
[row]Количество стр[/row][value]482[/value]
[/main]
Графы журнала:
№ записи
Дата проверки знаний
Фамилия, инициалы проверяемого лица
Название правил, стандартов, инструкций
Фамилии членов комиссии или проверяющих лиц (графа заполняется для каждого лица)
Подписи членов комиссии или проверяющих лиц
Подпись проверяемого лица
';
preg_match_all("#(?:(?U)\[row\](.+)\[/row\](?-U)|(?U)\[value\](.+)\[/value\](?-U)|\[/main\](.+))#ius",$str,$mas);
$row = preg_grep("#.+#ius",$mas[1]); // array
$value = preg_grep("#.+#ius",$mas[2]); // array
$posle_main = implode("",preg_grep("#.+#ius",$mas[3]));
echo "<pre>";
var_dump($row);
echo "</pre>";
echo "<pre>";
var_dump($value);
echo "</pre>";
echo "<pre>";
var_dump($posle_main);
echo "</pre>";
Спустя 40 минут, 21 секунда (23.02.2012 - 20:52) nugle написал(а):
Все работает, спасибо
а что означает (?U) и (?-U) ?
а что означает (?U) и (?-U) ?
Спустя 3 минуты, 6 секунд (23.02.2012 - 20:55) dadli написал(а):
ето "внутренни модификатор"
вот http://ru.php.net/manual/ru/regexp.referen...nal-options.php
вот http://ru.php.net/manual/ru/regexp.referen...nal-options.php
Спустя 6 минут, 18 секунд (23.02.2012 - 21:02) nugle написал(а):
про это понял
такой еще вопрос, что означает модификатор U
пишут, что инвертирует жадность, но мне это не о чем не говорит, если можно, то с примерчиками, пожалуйста
такой еще вопрос, что означает модификатор U
пишут, что инвертирует жадность, но мне это не о чем не говорит, если можно, то с примерчиками, пожалуйста
Спустя 15 минут, 35 секунд (23.02.2012 - 21:17) Placido написал(а):
Это доступно описано в статье "Регулярные выражения" в Википедии. См. раздел Жадная и ленивая квантификация.
Спустя 23 секунды (23.02.2012 - 21:18) Winston написал(а):
nugle
Цитата (nugle @ 23.02.2012 - 20:02) |
такой еще вопрос, что означает модификатор U |
Чтобы в шалоне не писать постоянно .*? или .+? можно просто поставить этот модификатор.
Но если у тебя в шаблоне будет .*? а так же будет мод. U, тогда жадность опять возвращается.
<div>1</div><div>2</div>
Шаблон '#<div>(.*)</div>#' - вернет 1</div><div>2
Шаблон '#<div>(.*?)</div>#' - вернет 1 и 2
Шаблон '#<div>(.*)</div>#U' - вернет 1 и 2
Шаблон '#<div>(.*?)</div>#U' - вернет 1</div><div>2
Понятно?
Спустя 5 минут, 29 секунд (23.02.2012 - 21:23) nugle написал(а):
все отлично понятно, только непонятно, почему же мое регулярное выражение не сработало(
тут
тут