Xwab
Форумыnavigate_nextПрограммирование на PHP

Регулярки
Сообщения
wapmorgan

угу)
понаставил что сам путаюсь.
пытаюсь сделать какую нибудь гибкость.
Цитата:
"Они как переменные считаются и результат заносится в массив."

дык это мне и нужно

03 Авг 2010, 19:44
Mediator21

Morgan, еще по результатам видно что считывается первый {if...} и первый {/if} чтобы не парится можно так сделать
{if $a}
{/if $a}

03 Авг 2010, 19:51
wapmorgan

хе, я пытался.
но он не хочет принимать ни в какую.
сейчас дам пример.
$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}

        )

)


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


__________
посл.ред. 03 Авг 2010, 20:06; всего 1 раз 03 Авг 2010, 19:53
Mediator21

Morgan, внимательно присмотрись какая у тебя первая переменная  там третью или четвертую нужно, и перед \\1 знак долара поставь

03 Авг 2010, 20:02
wapmorgan

тьфу, изменил.
уже я пробовал, результат нужного не дало

03 Авг 2010, 20:06
Mediator21

Morgan, найдено то и первое и второе, только второе вконце. А ты разделить не хочешь, сначала парсишь на блоки if, а потом то что внутри блока.

03 Авг 2010, 20:26
wapmorgan

16, слишком мутерно каждые вложенные if'ы парсить

03 Авг 2010, 20:29
wapmorgan

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

03 Авг 2010, 22:02
Sandr

Подскажите, как сделать проверку ввода ника. А именно, в нике могут содержаться рус и англ буквы, цифры, знаки - _ Ник может содержать пробелы, например "n ik" или "n i k" но не " nik". Ну и не должен быть пустым или состоять из пробелов.

25 Ноя 2010, 22:32
Mars

Sandr,

$nick = trim(preg_replace('/[^a-zA-Zа-яА-Я0-9_\-\040]/', '', $_POST['nick']));
if (empty($nick)) die('error');

как-то так

25 Ноя 2010, 23:14
Ответить на тему