Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с регулярным выражением
 
 автор: WapMorgan   (03.08.2010 в 21:42)   письмо автору
 
 

<?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])
{if $a}
{if $b}

{/if}

хотя должно быть два найденных значения, типа
$ifs[0][0] => 
{if $b}

{/if}
$ifs[1][0] => {if $a}

{/if}

уже замучался я с это регуляркой :| , прошу помощи

  Ответить  
 
 автор: WapMorgan   (03.08.2010 в 22:08)   письмо автору
 
   для: 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}

        )

)


то есть, первое вхождение найдено а второе нет

  Ответить  
 
 автор: sms-send   (03.08.2010 в 22:27)   письмо автору
 
   для: WapMorgan   (03.08.2010 в 21:42)
 

{if $a} 

{/if}


А каким образом оно там может быть найдено, если такой подстроки в исходной строке нет?

  Ответить  
 
 автор: WapMorgan   (03.08.2010 в 22:44)   письмо автору
 
   для: sms-send   (03.08.2010 в 22:27)
 

в смысле?
всегда исходная строка это
<?php
$content 
'{if $a} 
{if $b} 

{/if $b} 

{/if $a}'
;

// либо

$content '{if $a} 
{if $b} 

{/if} 
{/if}'
;
?>

  Ответить  
 
 автор: sms-send   (03.08.2010 в 22:48)   письмо автору
 
   для: WapMorgan   (03.08.2010 в 22:44)
 

Вижу, но не вижу там то, что вы поставили задачей найти..

Есть подстрока
{if $b}  

{/if} 
но нет
{if $a}  

{/if} 

  Ответить  
 
 автор: WapMorgan   (03.08.2010 в 22:51)   письмо автору
 
   для: sms-send   (03.08.2010 в 22:48)
 

опять не понял.
по регулярному выржанию должно найти все (и {if $a} и {if $b});
проблема в том что когда они вложенны друг в друга то не могу я получить все блоки

  Ответить  
 
 автор: sms-send   (03.08.2010 в 22:54)   письмо автору
 
   для: WapMorgan   (03.08.2010 в 22:51)
 

{if $a}
такое есть

{if $b}
и такое есть

но {if $a}, после которого через несколько пробельных символов идёт {/if} - такого в исходной строке нет. И всё-таки, что конкретно нужно выделить? Отдельные открывающие теги или в комплекте со всем содержимым и с закрывающим тегом:

{if $a}  
{if $b}

{/if $b}
{/if $a}
{if $b}

{/if $b}

  Ответить  
 
 автор: WapMorgan   (03.08.2010 в 23:15)   письмо автору
 
   для: 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}';


решено с помощью создания функции для рекурсивного прохода по всем таким вложенностям.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования