На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR
  
    > Трабла с регулярными выражениями , Perl
      Есть вот такой код:

      ExpandedWrap disabled
        $str  = "<input type=hidden name=\"thisistest\" value=\"2082347\">\n";
         
        @result1 = $str =~m/(.*)(<input )(.*)(name\=")(.*)(")(.*)/;
        @result2 = $str =~m/(.*)(<input )(.*)(value\=")(.*)(")(.*)/;
         
        print "$result1[4]\n";
        print "$result2[4]\n";


      $result2[4] - выдает как мне и надо 2082347,
      однако $result1[4] выдает thisistest" value="2082347.
      Вопрос: почему??? '.' вроде обозначает любой символ, так что, пробел не считаеться за любой символ? Что тогда есть любой символ?
      Сообщение отредактировано: Michail04 -
        А что надо сделать?
          Michail04, в том-то и дело, что '.' проглатывает остальную часть строки. В таком случае нужно либо точно указывать класс допустимых (а в данном случае недопустимых [^"]) символов, либо использовать квантификатор жадности '?':
          ExpandedWrap disabled
            @result1 = $str =~m/(.*)(<input )(.*)(name\=")(.*?)(")(.*)/;
            // или
            @result1 = $str =~m/(.*)(<input )(.*)(name\=")([^"]*)(")(.*)/;
            Ну там же нет учёта конца тега. И не понятно к какому тегу может относиться атрибут NAME.


            Надо бы:
            ExpandedWrap disabled
              print "[$_]\n" foreach '<input name="abc"><a name="1324@df">353324324</a>'=~/(.*?)<input\s*[^>]*?name\s*=\s*(?="(.+?)"|([^>\s]+))[^>]*?>(.*)/iso;
              Цитата Trustmaster @
              а в данном случае недопустимых [^"]) символов

              Сэнкс! Это именно то что нужно.
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0181 ]   [ 14 queries used ]   [ Generated: 18.05.24, 11:05 GMT ]