|
|
|
|
<?php
$content = '{if $a}
{if $b}
{/if}
{/if}';
preg_match_all('~\{if (\!)?(\~)?\$((.*)(\.(.*))?)( (.*) ([0-9]+|\$((.*)(\.(.*))?)))?\}(?:\r\n|\n)?(.*)(?:\r\n|\n)?\{\/if\}~uUs', $content, $ifs);
print_r($ifs);
?>
|
выдает одно найденное значение с содержимым ($ifs[0][0])
хотя должно быть два найденных значения, типа
$ifs[0][0] =>
{if $b}
{/if}
$ifs[1][0] => {if $a}
{/if}
|
уже замучался я с это регуляркой :| , прошу помощи | |
|
|
|
|
|
|
|
для: WapMorgan
(03.08.2010 в 21:42)
| | пробовал сделать так
<?php
$content = '{if $a}
{if $b}
{/if $b}
{/if $a}';
preg_match_all('~\{if ((\!)?(\~)?\$((.*)(\.(.*))?)( (.*) ([0-9]+|\$((.*)(\.(.*))?)))?)\}(?:\r\n|\n)?(.*)(?:\r\n|\n)?\{\/if \\1\}~uUs', $content, $ifs);
print_r($ifs);
?>
|
===>>>
Array
(
[0] => Array
(
[0] => {if $a}
{if $b}
{/if $b}
{/if $a}
)
[1] => Array
(
[0] => $a
)
[2] => Array
(
[0] =>
)
[3] => Array
(
[0] =>
)
[4] => Array
(
[0] => a
)
[5] => Array
(
[0] => a
)
[6] => Array
(
[0] =>
)
[7] => Array
(
[0] =>
)
[8] => Array
(
[0] =>
)
[9] => Array
(
[0] =>
)
[10] => Array
(
[0] =>
)
[11] => Array
(
[0] =>
)
[12] => Array
(
[0] =>
)
[13] => Array
(
[0] =>
)
[14] => Array
(
[0] =>
)
[15] => Array
(
[0] =>
{if $b}
{/if $b}
)
)
|
то есть, первое вхождение найдено а второе нет | |
|
|
|
|
|
|
|
для: WapMorgan
(03.08.2010 в 21:42)
| |
А каким образом оно там может быть найдено, если такой подстроки в исходной строке нет? | |
|
|
|
|
|
|
|
для: sms-send
(03.08.2010 в 22:27)
| | в смысле?
всегда исходная строка это
<?php
$content = '{if $a}
{if $b}
{/if $b}
{/if $a}';
// либо
$content = '{if $a}
{if $b}
{/if}
{/if}';
?>
|
| |
|
|
|
|
|
|
|
для: WapMorgan
(03.08.2010 в 22:44)
| | Вижу, но не вижу там то, что вы поставили задачей найти..
Есть подстрока
но нет
| |
|
|
|
|
|
|
|
для: sms-send
(03.08.2010 в 22:48)
| | опять не понял.
по регулярному выржанию должно найти все (и {if $a} и {if $b});
проблема в том что когда они вложенны друг в друга то не могу я получить все блоки | |
|
|
|
|
|
|
|
для: WapMorgan
(03.08.2010 в 22:51)
| | такое есть
и такое есть
но {if $a}, после которого через несколько пробельных символов идёт {/if} - такого в исходной строке нет. И всё-таки, что конкретно нужно выделить? Отдельные открывающие теги или в комплекте со всем содержимым и с закрывающим тегом:
{if $a}
{if $b}
{/if $b}
{/if $a}
|
| |
|
|
|
|
|
|
|
для: sms-send
(03.08.2010 в 22:54)
| | все, решено.
нужно было из
$content = '{if $a}
{if $b}
{/if}
{/if}';
|
сделать
$ifs[0][0] = '{if $a}
{if $b}
{/if}
{/if}';
$ifs[0][1] = '{if $b}
{/if}';
|
решено с помощью создания функции для рекурсивного прохода по всем таким вложенностям. | |
|
|
|