Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   регулярка свехнулась, толи я ...)) (https://forum.antichat.xyz/showthread.php?t=196535)

Sn@k3 15.04.2010 20:41

регулярка свехнулась, толи я ...))
 
вообщем есть строка типа:

Код:

<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>
и надо бы вытащить три значения:
дата
город
текст

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


Код:

дата-        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/ регулярки рабочие, в файле же не пашет. п.с. как же я тока не пробовал выводить и прег_матчем и прегматчем_алл, всякие форы, вайлы, форетчи всё-всё-всё, кароче помогите))

W!z@rD 15.04.2010 20:46

center>(.+?)</td>.*?checkpoint2>(.+?)</td>.*?checkpoint3>(.+?)</td>

http://img44.imageshack.us/img44/4363/04152010224509.jpg

Sn@k3 15.04.2010 22:01

так он всю строку копипастит) такбы я и сам сделал именно те три отдельно а не вместе

Pashkela 15.04.2010 22:08

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];
?>

не?

Sn@k3 15.04.2010 22:29

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

dr.Web 16.04.2010 08:49

я уже делал тоже самое недавно
http://forum.antichat.ru/thread196196.html

login999 16.04.2010 10:30

Чисто из интереса решил на Python.
Почему-то мну кажется, что одна регулярка - лучше чем три...

Код:

#!/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:]


W!z@rD 16.04.2010 17:29

Цитата:

Сообщение от Sn@k3
так он всю строку копипастит) такбы я и сам сделал именно те три отдельно а не вместе

не понял, гоу на канал, там разберемся :)


Время: 10:20