регулярка свехнулась, толи я ...))

Discussion in 'PHP' started by Sn@k3, 15 Apr 2010.

  1. Sn@k3

    Sn@k3 Elder - Старейшина

    Joined:
    13 Apr 2006
    Messages:
    1,000
    Likes Received:
    437
    Reputations:
    90
    вообщем есть строка типа:

    Code:
    <table width=100% bgcolor=#FDFDFF width=115><td width=16% valign=top checkpoint1><p align=center>10.02.2009</td><td align=center width=18% valign=top checkpoint2>22город222</td><td width=51% valign=top checkpoint3>121текст2222222</td></tr></table>
    и надо бы вытащить три значения:
    дата
    город
    текст

    набросал регулярку для всех трёх:


    Code:
    дата-        ter>([0-9]{1,2}).([0-9]{2}).([0-9]{4})</td
    город-      n=top checkpoint2>(.*)</td><td width=51%
    текст-       top checkpoint3>(.*)</td></tr>
    
    проверил тут: http://gskinner.com/RegExr/ регулярки рабочие, в файле же не пашет. п.с. как же я тока не пробовал выводить и прег_матчем и прегматчем_алл, всякие форы, вайлы, форетчи всё-всё-всё, кароче помогите))
     
  2. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    center>(.+?)</td>.*?checkpoint2>(.+?)</td>.*?checkpoint3>(.+?)</td>

    http://img44.imageshack.us/img44/4363/04152010224509.jpg
     
    1 person likes this.
  3. Sn@k3

    Sn@k3 Elder - Старейшина

    Joined:
    13 Apr 2006
    Messages:
    1,000
    Likes Received:
    437
    Reputations:
    90
    так он всю строку копипастит) такбы я и сам сделал именно те три отдельно а не вместе
     
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?php
    $a
    ='<table width=100% bgcolor=#FDFDFF width=115><td width=16% valign=top checkpoint1><p align=center>10.02.2009</td><td align=center width=18% valign=top checkpoint2>22город222</td><td width=51% valign=top checkpoint3>121текст2222222</td></tr></table>';
    preg_match('#<table .*><td .*><p .*>(.*)</td><td .*>(.*)</td><td .*>(.*)</td></tr></table>#',$a,$res);
    echo 
    "Дата: " $res[1] . " город: " $res[2] . " текст: " $res[3];
    ?>
    не?
     
  5. Sn@k3

    Sn@k3 Elder - Старейшина

    Joined:
    13 Apr 2006
    Messages:
    1,000
    Likes Received:
    437
    Reputations:
    90
    спб, был косяк в том что я напрямую данные из файла пробовал прегматчем обрабатывать, надо было сначало их точнее из переменной где были данные скопить в ещё одну переменную
     
  6. dr.Web

    dr.Web Member

    Joined:
    2 Feb 2009
    Messages:
    7
    Likes Received:
    22
    Reputations:
    10
  7. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Чисто из интереса решил на Python.
    Почему-то мну кажется, что одна регулярка - лучше чем три...

    Code:
    #!/usr/bin/env python
    #-*-encoding:UTF-8-*-
    
    import re
    
    data = u"""<table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>вава</td><td width=51% valign=top 3>вавававава</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>6565</td><td width=51% valign=top 3>565656565</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>456456</td><td width=51% valign=top 3>456456456</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>456456456</td><td width=51% valign=top 3>456456</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>456456456</td><td width=51% valign=top 3>456456456</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>456456456</td><td width=51% valign=top 3>456456456</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>5555</td><td width=51% valign=top 3>4555555555</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>57567</td><td width=51% valign=top 3>567567</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>757567</td><td width=51% valign=top 3>567567567</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>567567</td><td width=51% valign=top 3>576756756756</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>56757</td><td width=51% valign=top 3>56756757</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>4645645</td><td width=51% valign=top 3>6456456456</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>45645</td><td width=51% valign=top 3>645646</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>45645</td><td width=51% valign=top 3>645646</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>45645</td><td width=51% valign=top 3>645646</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>45645</td><td width=51% valign=top 3>645646</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>45645</td><td width=51% valign=top 3>645646</td></tr></table>
    <table width=100% bgcolor=#FDFDFF width=702><td width=16% valign=top 1><p align=center>14.04.2010</td><td align=center width=18% valign=top 2>343434</td><td width=51% valign=top 3>343434</td></tr></table>"""
    
    parsed =  re.findall(ur"\>(.[^\<p ]*?)\<\/td\>", data)
    dates = parsed[::3]
    first = parsed[1::3]
    second = parsed[2::3]
    
    for x in zip(dates, first, second):
        print x
    print u"="*40
    while parsed:
        print u"|".join(parsed[:3])
        parsed = parsed[3:]
    
     
    #7 login999, 16 Apr 2010
    Last edited: 16 Apr 2010
  8. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    не понял, гоу на канал, там разберемся :)