[Регулярки & Mod_Rewrite] Задай вопрос, получи ответ.

Discussion in 'PHP' started by .:EnoT:., 19 Nov 2008.

Thread Status:
Not open for further replies.
  1. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    Delphi.
    Багнутый модуль RegExpr...
    Суть бага:
    Есть регулярка:
    <ucode>(.*)</ucode>
    Сам текст:
    В результате мы получаем вот так:
    Может найдётся верная регулярка для "<td align="left">1</td>" и удастся обойти баг!
    Спасибо!
     
  2. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    -Hormold-
    Code:
    <ucode>(.*[b]?[/b])</ucode>
    
    ?
     
  3. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Используй preg_match_all (php) или мод для проверки всех вхождений
    Т.к. используется проверка для одного вхождения, скрипт выбирает самые крайние параметры шаблона
     
  4. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    Эмм... Я же написал - у меня Delphi
    krypt3r! Спасибо... Что-то я не вспомнил...
     
    #444 -Hormold-, 4 Jun 2009
    Last edited: 4 Jun 2009
  5. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    точка жадничает, надо ей лекарство от жадности в виде ? вручить =)
     
    1 person likes this.
  6. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Ну это вообще-то раздел WEB, но даже если юзаешь Делфи, используй мод либо для выборки всех значений, либо для выборки первого вхождения
     
  7. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    -Hormold-, я создавал эту тему, и ТЫ САМ на этот вопрос отвечал.
    http://forum.antichat.ru/thread119447.html
     
  8. alwex

    alwex New Member

    Joined:
    14 Dec 2008
    Messages:
    137
    Likes Received:
    4
    Reputations:
    2
    вот
    <tr class="te70"><td>Любой текст</td><td>Это надо узнать</td></tr>
    мне надо чтобы там где любой текст было например (.*) а там где надо узнать мне надо ети строчки потом вывести. какая регулярка тут нужна?
     
  9. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    PHP:
    "<tr[^>]*<td[^>]*.*<\/td><td>(.*)<\/td><\/tr>"
    вроде так
     
    #449 FireFenix, 5 Jun 2009
    Last edited: 5 Jun 2009
  10. alwex

    alwex New Member

    Joined:
    14 Dec 2008
    Messages:
    137
    Likes Received:
    4
    Reputations:
    2
    ща потестю...
     
  11. alwex

    alwex New Member

    Joined:
    14 Dec 2008
    Messages:
    137
    Likes Received:
    4
    Reputations:
    2
    не роботает
     
  12. alwex

    alwex New Member

    Joined:
    14 Dec 2008
    Messages:
    137
    Likes Received:
    4
    Reputations:
    2
    сделайте чтобы так было
    <tr class="te70"><td>Manufacturer, model (модель телефона)</td><td>ТУТ ТЕКСТкакойй надо достать</td></tr>
     
  13. Red_Red1

    Red_Red1 Banned

    Joined:
    12 Jan 2007
    Messages:
    246
    Likes Received:
    258
    Reputations:
    83
    Code:
    <tr class="te70"><td>(.*)<\/td><td>(.*)<\/td>
    Первый карман - "Любой текст"
    Второй - "Это надо узнать"
    Вообще достаточно <td>(.*?)<\/td> но тут важно парсить только строчки указаного вида (т.е. только <tr class="te70"><td>Любой текст</td><td>Это надо узнать</td></tr>) Причем "Любой текст" не совсем верно думаю, потому как если в тексте будут </td> то эта регулярка не сработает. И разбор чуть не такой при использовании короткой регулярой.
     
    #453 Red_Red1, 5 Jun 2009
    Last edited: 5 Jun 2009
  14. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    PHP:
    <?php

    $str 
    '<tr class="te70"><td>Любой текст</td><td>Это надо узнать</td></tr>';
    $regexp '/<tr[^>]*><td[^>]*>.*<\/td><td[^>]*>(.*)<\/td><\/tr>/';
    preg_match_all($regexp$str$match);
    print_r($match);
            
    ?>
    Вот устойчивая регулярка выведет в $match[1] нужную "Это нада узнать"
     
    #454 FireFenix, 5 Jun 2009
    Last edited: 5 Jun 2009
  15. alwex

    alwex New Member

    Joined:
    14 Dec 2008
    Messages:
    137
    Likes Received:
    4
    Reputations:
    2
    спс. роботает
     
  16. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    чёт у меня башка ваще не варит =\\


    есть строка
    Code:
    <input type="hidden" name="inviter" value=""><input type="hidden" name="token" value="67f21d69aa231" />
    
    есть регулярка

    Code:
    <input.*?value="(.*?)".*?name="(.+?)".*?>#is
    
    в результате он находит

    Code:
    
        [1] => Array
            (
                [0] => 
            )
    
        [2] => Array
            (
                [0] => token
            )
    
    Не могу понять где я ошибся .... почему он НАХОДИТ чтото ... по идеи не должно же =\\
     
  17. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Code:
    name="(.+?)"
    Вот.. Тут находит.
     
  18. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Порядок следования value и name в регулярном выражении не соответствует тексту
    PHP:
    <?php

    $string 
    '<input type="hidden" name="inviter" value=""><input type="hidden" name="token" value="67f21d69aa231" />';
    $regexp '/<input.*?name="(.+?)".*?value="(.*?)".*?>/is';

    preg_match_all($regexp$string$match);
    print_r($match);
        
    ?>
    Выдаст
    Code:
    Array
    (
        [0] => Array
            (
                [0] => <input type="hidden" name="inviter" value="">
                [1] => <input type="hidden" name="token" value="67f21d69aa231" />
            )
    
        [1] => Array
            (
                [0] => inviter
                [1] => token
            )
    
        [2] => Array
            (
                [0] => 
                [1] => 67f21d69aa231
            )
    
    )
    
     
  19. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    FireFenix млять ты читал что я написал ? прочти 10 раз ... я написал что НЕ ДОЛЖНО НАХОДИТЬ ...

    mailbrush а это тут причём .. порядок следования не соответствует ... так что это тут не причём ..
     
  20. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Упс..... наверное оно считывает 2 тега как 1 большой тег с кучей левого текста.
    Можно край тега ограничить [^>]*> и всё будет намана
     
Thread Status:
Not open for further replies.