На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Дополнения к правилам (только для данного раздела)
- Используйте подсветку синтаксиса при выделении исходного кода;
- В описании темы обязательно укажите язык программирования;
- Прежде чем задать вопрос, обязательно воспользуйтесь поиском и загляните в FAQ раздела.
- Если вопрос касается серверного ПО, указывайте ОС.
- Если вопрос касается ASP.NET то лучше будет задать его в соответствующем разделе. Там вы сможете получить ответ намного быстрее.

Модераторы: Serafim, fatalist
  
> Помогите с регулярными выражениями
    У меня есть текст странички, который хранится в переменной $text. В нем есть форма, как мне считать все value из всех полей, причем так, чтобы это все валилось в переменную $a['имя параметра'], где имя параметра это name из этого input с учетом, что это name и value заключены в треугольные скобки < >. Для упрощения name всегда раньше value. У кого есть, что-нибудь подобное, то помогите плиз. Или кто знает как это сделать, а то у меня не получается. :wall:
      На Perl это одной строчкой пишется, B)
      а на вашем PHP строчек пять, наверное.
      ExpandedWrap disabled
         
        %a=~m/<input.*?name\s*=\s*("[^"]*"|'[^']*').*?value\s*=\s*("[^"]*"|'[^']*').*?>/gi
        А как насчет
        ExpandedWrap disabled
          preg_match('<input.*?name\s*=\s*("[^"]*"|'[^']*').*?value\s*=\s*("[^"]*"|'[^']*').*?>', $text, $a);

        preg_match вроде как perl-совместимая функция?
          Trustmaster
          Я сильно сомневаюсь. Даже если апострофы заэкранировать :)
          В Перле эта конструкция очень чувствительна к контексту и к модификатору 'g'.
          Например в скалярном контексте m// уже будет возращать true или false, а
          не список всех подшаблонов в нутри круглых скобок, как во втором посте.
            Вот эта регулярка выдает ошибочку, аля
            Parse error: parse error in /pub/home/hsparta2/htdocs/enter.php on line 28
            ExpandedWrap disabled
              preg_match("<input.*?name\s*=\s*("[^"]*"|'[^']*').*?value\s*=\s*("[^"]*"|'[^']*').*?>", $page_text, $a);
            Я не очень лажу с регулярными выражениями...сейчас попробую сам допереть, но если кто может подскажите где ошибка.
            Сообщение отредактировано: SER-Gun -
              регексп в preg_match должен быть ограничен слева и справа, например слешами:

              ExpandedWrap disabled
                preg_match( "/регексп паттерн/", $string );


              и перед двойными кавычками поставь \, раз у тебя вся строка в двойных кавычках.
              Сообщение отредактировано: rvt -
                И так не хочет:
                ExpandedWrap disabled
                  preg_match("/<input.*?name\s*=\s*(\"[^\"]*\"|'[^']*').*?value\s*=\s*(\"[^\"]*\"|'[^']*').*?>/", $page_text, $a);
                  Спасибо проблема решилась разбиванием на несколько рег. выражений:

                  ExpandedWrap disabled
                    preg_match_all("/<input[^>]+>/",$page_text,$forms);
                    $form = $forms[0];
                    $a = array();
                    foreach($form as $str)  {
                                    //print("\n$str");
                                    preg_match_all("/name=(\w+)/",$str,$tmp1);
                                    preg_match_all("/value=\"(.*)\"/",$str,$tmp2);
                                    $a[$tmp1[1][0]] = $tmp2[1][0];
                                    }
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0318 ]   [ 15 queries used ]   [ Generated: 2.05.24, 22:53 GMT ]