подскажите с регулярным выражениям

tt

Новичок
подскажите с регулярным выражениям

PHP:
<?php
$str = '
<!-- Форма №1-->
<form action="ation_script" method="post" enctype="multipart/form-data" name="имяФормы4" target="_parent">
<label for="label2">Выбор в Select мульти</label>
      <select name="select2" size="5" multiple="multiple" id="label2">
        <option value="4">метка 4</option>
      </select>
</form>


<!-- Форма №2-->
<form action="ation_script" method="post" enctype="multipart/form-data" name="имяФормы3" target="_parent">
<label for="label2">Выбор в Select мульти</label>
      <select name="select2" size="5" multiple="multiple" id="label2">
        <option value="4">метка 4</option>
      </select>


<!-- Форма №3-->
      <form action="ation_script" method="post" enctype="multipart/form-data" name="имяФормы3" target="_parent">
<label for="label2">Выбор в Select мульти</label>
      <select name="select2" size="5" multiple="multiple" id="label2">
        <option value="4">метка 4</option>
      </select>
';

preg_match_all('~(<form.*?>.*?(?:<form|</form>|$))~is', $str, $res);

print_r($res);


?>
Должен вывести три найденных формы, выводит только две, и во вторую захватывает тег,
<form

Неправлиьнный вывод:
PHP:
   [1] => Array
        (
            [0] => <form action="ation_script" method="post" enctype="multipart/form-data" name="имяФормы1" target="_parent">
<label for="label2">Выбор в Select мульти</label>
      <select name="select2" size="5" multiple="multiple" id="label2">
        <option value="4">метка 4</option>
      </select>
</form>
            [1] => <form action="ation_script" method="post" enctype="multipart/form-data" name="имяФормы2" target="_parent">
<label for="label2">Выбор в Select мульти</label>
      <select name="select2" size="5" multiple="multiple" id="label2">
        <option value="4">метка 4</option>
      </select>

      <form
        )
Ожидаемый и не получаемый:
PHP:
[1] => Array
        (
            [0] => <form action="ation_script" method="post" enctype="multipart/form-data" name="имяФормы1" target="_parent">
<label for="label2">Выбор в Select мульти</label>
      <select name="select2" size="5" multiple="multiple" id="label2">
        <option value="4">метка 4</option>
      </select>
</form>
            [1] => <form action="ation_script" method="post" enctype="multipart/form-data" name="имяФормы2" target="_parent">
<label for="label2">Выбор в Select мульти</label>
      <select name="select2" size="5" multiple="multiple" id="label2">
        <option value="4">метка 4</option>
      </select>
            [2] => <form action="ation_script" method="post" enctype="multipart/form-data" name="имяФормы3" target="_parent">
<label for="label2">Выбор в Select мульти</label>
      <select name="select2" size="5" multiple="multiple" id="label2">
        <option value="4">метка 4</option>
      </select>
      
        )
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Вопросы парсинга страниц не обсудаются в этом форуме по морально етическим соображениям
 

tt

Новичок
Mr_Max
мне нужно распарсить свою страницу, это этично?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Можете обяснить причину _зачем_ обрабатывать формы _своей_ страницы?
 

tt

Новичок
мне нужно для подстановки данных которые вел пользователь в форму во время заполнения, просто обычное выражения, а я или туплю или усталость но не могу добиться того что хочу.

-~{}~ 29.11.07 21:50:

Блин все таки усталость:
:)
PHP:
preg_match_all('~(<form.*?>.*?)(?:<form|</form>|$)~isu', $str, $res);
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
мне нужно для подстановки данных которые вел пользователь в форму во время заполнения, просто обычное выражения, а я или туплю или усталость но не могу добиться того что хочу.
Чем не подошел массив _POST ?
 

tt

Новичок
Mr_Max
По многим причинам, это тема для другого разговора, спасибо за ответы :)
 

tt

Новичок
нет не работает мой вариант :)
@ndrey
Да там три формы, просто в последних дву нету закрывающегося тега </form>
В том вся и соль :)
Подредактировал вроде наглядней будет.
 

@ndrey

Новичок
Да там три формы, просто в последних дву нету закрывающегося тега </form>
В том вся и соль :)
я вижу, что начинаются 3 формы, но заканчивается одна. Мне непонятен сей изврат с формами.
 

tt

Новичок
Mr_Max
Обьясните суть свои реплик, ну чест слово я не пойму таких как Вы, вы накручиваете себе рейтинг в данном клубе? Вас смущает вопрос и Вы не знаете как ответить, но ответить надо? в чем Ваша проблема?
@ndrey
А вопрос понятен?
вот решения которое работает уж точно:
PHP:
preg_match_all('~(<form.*?>.*?)(?=</form>|<form|$)~is', $str, $res);
И заодно хочу пояснить для тех кто может использует данные пример при решении своих задач.

Когда некоторое регулярное выражения или его часть в круглых скобках совпадает с частью строки, оно ее захватывает эту подстроку, и при дальнейшем анализе регулярное выражения уже не видит захваченной части стоки, в PCRE есть конструкции которые позволяют не захватывать вы выражении части строки, для того чтоб она была доступна при дальнейшем разборе.
это ^,$, \b и (?=), (?!) (?<=), (<!)

p/s
Если я не правильно истолковал поправьте меня, пожалуйста.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
tt
Проблемы у тебя, поэтому ты открыл этот топик.
Но внятно объяснитть ЗАЧЕМ подставлять данные таким хитрым образом - ты не хочешь.
Я спросил 2 раза.
3-го не будет
Так-же как и не будет ответов до внятных обяснений зачем.

Все понял?
 

@ndrey

Новичок
@ndrey А вопрос понятен?
да понятен, и решение я уже давно нашел (так для интереса), мне говнокод непонятен :)
вот решения которое работает уж точно: preg_match_all('~(<form.*?>.*?)(?=</form>|<form|$)~is', $str, $res);
2 скобки точно лишние
И заодно хочу пояснить для тех кто может использует данные пример при решении своих задач...
все это есть в статьях (на этом сайте) и все это знают.
 

tt

Новичок
Mr_Max
Я не спрашивал ЗАЧЕМ подставлять данные, верно?
Я спрашивал про регулярное выражение,
Вы почему то не поняли, что я спрашиваю,
и хорош тыкать.
Все Понял?

-~{}~ 29.11.07 22:48:

@ndrey
Да что вы Скобки не лишние, видно не все знают вы в частности.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Я не спрашивал ЗАЧЕМ подставлять данные, верно?
Это кто написал? я?
мне нужно для подстановки данных которые вел пользователь в форму во время заполнения
и хорош тыкать.
Извините.

Да. Так-же как и все остальные
 

@ndrey

Новичок
Да что вы Скобки не лишние, видно не все знают вы в частности.
соглашусь, только если вы собираетесь использовать в своем коде значения вхождений, но вы об этом не говорили. вам нужно было получить полное совпадение шаблону (судя по примеру), а для этого 2 скобки лишние (если вы понимате о каких скобках идет речь).
 
Сверху