[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярное выражение для bb тегов
nugle
Всем привет!
Задача такая

составил регулярку такого вида
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) ?

Спустя 3 минуты, 6 секунд (23.02.2012 - 20:55) dadli написал(а):
ето "внутренни модификатор"
вот http://ru.php.net/manual/ru/regexp.referen...nal-options.php

Спустя 6 минут, 18 секунд (23.02.2012 - 21:02) nugle написал(а):
про это понял
такой еще вопрос, что означает модификатор 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 написал(а):
все отлично понятно, только непонятно, почему же мое регулярное выражение не сработало(
тут
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.