Сейчас на форуме: Kybyx, user99 (+3 невидимых)

 eXeL@B —› Оффтоп —› помогите с регэкспами
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 23 ноября 2010 16:10
· Личное сообщение · #1


Code:
  1. <div style="padding: 3px"><b>Матчи с участием команды Бостон:</b></div><table cellspacing="0" cellpadding="3"><tr><td class="tha" width="65">Дата</td>
  2.  
  3.                               <td class="tha" width="100">Хозяева</td>
  4.                               <td class="tha" width="100">Гости</td>
  5.                               <td class="tha" width="50">Счет</td>
  6.                               <td class="tha" width="100">Комментарий</td>
  7.                                        </tr>
  8.                  <tr class=bcc><td>23.11.2010</td><td><a href="/stats.php?a=tt&tid=637&p=3:13:30383159">Атланта</a></td><td><b>Бостон</b></td><td class="co1">76:99</td><td></td></tr><tr class=bcc><td>21.11.2010</td><td><a href="/stats.php?a=tt&tid=632&p=3:13:30383159">Торонто</a></td><td><b>Бостон</b></td><td class="co2">102:101</td><td></td></tr><tr class=bcc><td>20.11.2010</td><td><b>Бостон</b></td><td><a href="/stats.php?a=tt&tid=627&p=3:13:30383159">Оклахома</a></td><td class="co2">84:89</td><td></td></tr><tr class=bcc><td>18.11.2010</td><td><b>Бостон</b></td><td><a href="/stats.php?a=tt&tid=635&p=3:13:30383159">Вашингтон</a></td><td class="co1">114:83</td><td></td></tr><tr class=bcc><td>14.11.2010</td><td><a href="/stats.php?a=tt&tid=642&p=3:13:30383159">Мемфис</a></td><td><b>Бостон</b></td><td class="co1">110:116</td><td></td></tr><tr class=bcc><td>12.11.2010</td><td><a href="/stats.php?a=tt&tid=636&p=3:13:30383159">Майами</a></td><td><b>Бостон</b></td><td class="co1">107:112</td><td></td></tr><tr class=bcc><td>09.11.2010</td><td><a href="/stats.php?a=tt&tid=621&p=3:13:30383159">Даллас</a></td><td><b>Бостон</b></td><td class="co2">89:87</td><td></td></tr><tr class=bcc><td>08.11.2010</td><td><a href="/stats.php?a=tt&tid=627&p=3:13:30383159">Оклахома</a></td><td><b>Бостон</b></td><td class="co1">83:92</td><td></td></tr><tr class=bcc><td>06.11.2010</td><td><b>Бостон</b></td><td><a href="/stats.php?a=tt&tid=644&p=3:13:30383159">Чикаго</a></td><td class="co1">110:105</td><td></td></tr><tr class=bcc><td>04.11.2010</td><td><b>Бостон</b></td><td><a href="/stats.php?a=tt&tid=633&p=3:13:30383159">Милуоки</a></td><td class="co1">105:102</td><td>(ОТ)</td></tr><tr class=bcc><td>03.11.2010</td><td><a href="/stats.php?a=tt&tid=660&p=3:13:30383159">Детройт</a></td><td><b>Бостон</b></td><td class="co1">86:109</td><td></td></tr><tr class=bcc><td>30.10.2010</td><td><b>Бостон</b></td><td><a href="/stats.php?a=tt&tid=638&p=3:13:30383159">Нью-Йорк</a></td><td class="co1">105:101</td><td></td></tr><tr class=bcc><td>28.10.2010</td><td><a href="/stats.php?a=tt&tid=639&p=3:13:30383159">Кливленд</a></td><td><b>Бостон</b></td><td class="co2">95:87</td><td></td></tr><tr class=bcc><td>27.10.2010</td><td><b>Бостон</b></td><td><a href="/stats.php?a=tt&tid=636&p=3:13:30383159">Майами</a></td><td class="co1">88:80</td><td></td></tr>                 </table>
  9.  
  10.                  </td></tr></table>


Как выдернуть из html все строки типа:
04.11.2010 Бостон Милуоки 105:102 (ОТ)
??




Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

Создано: 23 ноября 2010 17:31 · Поправил: Magister Yoda
· Личное сообщение · #2

[del] =\




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 23 ноября 2010 17:36 · Поправил: Crawler
· Личное сообщение · #3

В php можно использовать getElementsByTagName (). Где-то видел хороший код парсера

На хабре есть пример шикарный

http://habrahabr.ru/blogs/starting_programming/51610/

MagisterYoda, жесть)

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 23 ноября 2010 17:44
· Личное сообщение · #4

в трейсере не пашет =(




Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 23 ноября 2010 18:30 · Поправил: Guru_eXe
· Личное сообщение · #5

/<tr class=bcc><td>(.+?)<\/td><td><a href="(.+?)">(.+?)<\/a><\/td><td><b>(.+?)<\/b><\/td><td class="co1">(.+?)<\/td><td><\/td><\/tr>/i

зы
Не заметил, что там меняется :\

-----
may all your PUSHes be POPed!





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 23 ноября 2010 19:37
· Личное сообщение · #6

clip2net.com/s/DgC5 - я мож что не так делаю? По идее результаты должны выводиться, а их нет =(
Я не шарю в этом вообще




Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

Создано: 23 ноября 2010 21:18 · Поправил: Magister Yoda
· Личное сообщение · #7

Ara
Guru_eXe с помощью "/" и "/i" обозначил начало и конец
Crawler
--> э? <--
=\




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 23 ноября 2010 21:29
· Личное сообщение · #8

выводится, но что-то дюже много всего




Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

Создано: 24 ноября 2010 06:06
· Личное сообщение · #9

Guru_eXe
слэши не надо экранировать




Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

Создано: 24 ноября 2010 06:15
· Личное сообщение · #10

РегЭкспа намбр 1
Code:
  1. <tr class=bcc><td>(.*?)</td><td><a href=".*?">(.+?)</a></td><td><b>(.+?)</b></td><td class=".*?">(.+?)</td><td>(.*?)</td></tr>

--> 1 <--
РегЭкспа намбр 2
Code:
  1. <tr class=bcc><td>(.*?)</td><td><b>(.*?)</b></td><td><a href=".*?">(.*?)</a></td><td class=".*?">(.*?)</td><td>(.*?)</td></tr>

--> 2 <--




Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 24 ноября 2010 07:27 · Поправил: Guru_eXe
· Личное сообщение · #11

Magister Yoda, зачем две?
Твое <b>(.*?)</b> и <a href=".*?">(.+?)</a> подходит под условие <(.+?)>(.+?)<(.+?)> бгг)) ну или там пофантазировать и получится какое-нибудь страшное <(b|.+?)>(.+?)<\/(a|b)>, хотя, наверное было бы логичнее <(.+?)>(.+?)<\/(a|b)>, ну это не суть. В итоге:
Code:
  1. /<tr class=bcc><td>([0-9.]{10})<\/td><td><(b|.+?)>(.+?)<\/(a|b)><\/td><td>< (b|.+?)>(.+?)<\/(a|b)><\/td><td class="co1">([0-9:]{4,})<\/td><td>(.*?)<\/td><\/tr>/i

Результат выполнения.

убираем ненужное, подправляем co1:
Code:
  1. <tr class=bcc><td>([0-9.]{10})<\/td><td><(?:b|.+?)>(.+?)<\/(?:a|b)><\/td>< td><(?:b|.+?)>(.+?)<\/(?:a|b)><\/td><td class="co(?:1|2)">([0-9:]{4,})<\/td><td>(.*?)<\/td><\/tr>

Результат выполнения.
Комменты присутствуют.

Я сам слабо шарю в регулярках, поэтому у меня нубский код, там ведь группы есть, кеизы и все такое, ищу книгу хорошую. Может кто посоветует сразу?

-----
may all your PUSHes be POPed!





Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

Создано: 24 ноября 2010 08:17
· Личное сообщение · #12

Guru_eXe
да, действительно, но "/" не нужно экранировать =)
так что вот так будет
Code:
  1. <tr class=bcc><td>([0-9.]{10})</td><td><(?:b|.+?)>(.+?)</(?:a|b)></td><td> <(?:b|.+?)>(.+?)</(?:a|b)></td><td class="co(?:1|2)">([0-9:]{4,})</td><td>(.*?)</td></tr>

Ara
не знаю глюк форума это или что, но иногда лишние пробелы появляются - например в середине ссылки или кода, так что могу предположить что эти пробелы появляются в тэгах. так что проверяй




Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

Создано: 24 ноября 2010 08:19
· Личное сообщение · #13

Guru_eXe
даже думать особо не надо --> Вика <--




Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 24 ноября 2010 08:36 · Поправил: Guru_eXe
· Личное сообщение · #14

Я экранировал, так как тестил сначала под пхп, а потом не стал менять, так как работает и в вашем тресере.

Проверяйте:
Code:
  1. <tr class=bcc><td>([0-9.]{10})</td><td><.+?>(.*?)</.{1}></td><td><.+?>(.*? )</.{1}></td><td class="co\d{1}">([0-9:]{3,})</td><td>(.*?)</td></tr>

Code:
  1. <tr class=bcc><td>([0-9.]{10})</td><td><.+?>(.*?)</[ab]></td><td><.+?>(.*? )</[ab]></td><td class="co[12]">([0-9:]{3,})</td><td>(.*?)</td></tr>


Это хардкорно, не знаю как будет работать, проверять тоже надо:
Code:
  1. <td>(.{10})</td><td><.+?>(.*?)</[ab]></td><td><.+?>(.*?)</[ab]></ td><td class="co[12]">(.{3,}?)</td><td>(.*?)</td>

Code:
  1. <td>(.{10})</.{6}><.+?>(.*?)</[ab]></.{6}><.+?>(.*?)</[ab]></.{7} class="co[12]">(.{3,}?)</.{6}>(.*?)</td>


И то меня смущает обилие html-тегов.

-----
may all your PUSHes be POPed!





Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 24 ноября 2010 08:41 · Поправил: Guru_eXe
· Личное сообщение · #15

Magister Yoda, да, еще и читшитс есть, а есть такое:
http://www.ozon.ru/context/detail/id/4858175/
http://www.ozon.ru/context/detail/id/3996981/
http://www.ozon.ru/context/detail/id/1817772/
http://www.ozon.ru/context/detail/id/1379940/

http://www.ozon.ru/context/detail/id/4066500/
пара абзацев на википедии сможет заменить 608 страниц книги?

-----
may all your PUSHes be POPed!





Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 24 ноября 2010 13:01
· Личное сообщение · #16

class=bcc.{5}(.{10}).{10,}?>(.*?)<.{14,}?>(.*?)<.{24}(.{3,}?)< .{8}(.*?)<.{7}r>

Отдаленное начало напоминать регулярку)

-----
may all your PUSHes be POPed!




Ранг: 226.0 (наставник), 67thx
Активность: 0.160
Статус: Участник

Создано: 24 ноября 2010 18:29 · Поправил: SergX
· Личное сообщение · #17

Ara пишет:
Как выдернуть из html все строки типа:04.11.2010 Бостон Милуоки 105:102 (ОТ)


Ara, не совсем понял, тебе кодес нужен который это делает или результат нужен ?

Если результат то почему бы не сохранить это в ХТМЛ файл, потом в тотале открыть по F3 и скопипастить данные ?

23.11.2010 Атланта Бостон 76:99
21.11.2010 Торонто Бостон 102:101
20.11.2010 Бостон Оклахома 84:89
18.11.2010 Бостон Вашингтон 114:83
14.11.2010 Мемфис Бостон 110:116
12.11.2010 Майами Бостон 107:112
09.11.2010 Даллас Бостон 89:87
08.11.2010 Оклахома Бостон 83:92
06.11.2010 Бостон Чикаго 110:105
04.11.2010 Бостон Милуоки 105:102 (ОТ)
03.11.2010 Детройт Бостон 86:109
30.10.2010 Бостон Нью-Йорк 105:101
28.10.2010 Кливленд Бостон 95:87
27.10.2010 Бостон Майами 88:80

Ногами не пинайте, может я чёт не так понял, сёдня сильно устал…




Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

Создано: 24 ноября 2010 21:19
· Личное сообщение · #18

SergX
ему нужна регэкспа, которая будет выдирать результаты из подобных страничек



Ранг: 53.9 (постоянный), 19thx
Активность: 0.040
Статус: Участник

Создано: 25 ноября 2010 04:32 · Поправил: Zorn
· Личное сообщение · #19

Crawler пишет:
В php можно использовать getElementsByTagName ()

Эм, может быть в javascript ? Да и он тут мимо кассы...

Magister Yoda пишет:
да, действительно, но "/" не нужно экранировать =)

Может ты хотел сказать "не обязательно" ? Попробуй в javascripte например без экранирования слешей регулярку замутить
Например здесь проверь http://www.pcre.ru/eval/

Guru_eXe пишет:
Я экранировал, так как тестил сначала под пхп

В пхп можно начало и конец регулярки обозначать любым символом. Я например использую # и тогда тоже не нужно слеши экранировать.

А вообще можно хоть каждый символ заэкранировать кроме служебных, хуже от этого не будет.

Ну и на последок.
Code:
  1. <tr class=bcc><td>(\d{2}\.\d{2}\.\d{4})<\/td><td>(?:<b>|<a.+?>)(.*?)(?:<\/  b>|<\/a>)<\/td><td>(?:<b>|<a.+?>)(.*?)(?:<\/b>|<\/a>)<\/td><td class="co[12]">(\d+?\:\d+?)<\/td><td>(.*?)<\/td><\/tr>
Проверено работает ))
Нужно только лишние пробелы убрать

А вот вообще почти без тэгов
Code:
  1. d>(\d{2}\.\d{2}\.\d{4}).+?([а-яА-Я]+).+?([а-яА-Я]+).+?(\d+?:\d+?)<\/td><td>(.*?)<





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 25 ноября 2010 09:56
· Личное сообщение · #20

спс всем за помощь.




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 25 ноября 2010 12:40
· Личное сообщение · #21

Zorn пишет:
А вот вообще почти без тэгов

норм
Нью-Джерси и Нью-Йорк только режет в Нью просто, "-" не учел. А так супер.




Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 25 ноября 2010 15:14 · Поправил: Guru_eXe
· Личное сообщение · #22

[а-яА-Я-]

Code:
  1. ([0-9.]+).+?([а-яА-Я-]+).+?([а-яА-Я-]+).+?([0-9:]+).{8}>(.*?)<



-----
may all your PUSHes be POPed!





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 25 ноября 2010 15:57
· Личное сообщение · #23

это уж я допер )
чуть позже еще один выложу, если сам не осилю. Определюсь только, откуда дергать =)




Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 25 ноября 2010 16:54 · Поправил: Guru_eXe
· Личное сообщение · #24

Ara, тут, просто, игра — у кого короче
Zorn, может это привычка, вот и экранирую

-----
may all your PUSHes be POPed!




Ранг: 53.9 (постоянный), 19thx
Активность: 0.040
Статус: Участник

Создано: 26 ноября 2010 03:44
· Личное сообщение · #25

Guru_eXe пишет:
тут, просто, игра — у кого короче

Только нужно не переусердствовать
Твой например запросто сработает на тексте "1 куча текста 2, восемь>трёх, но < 9", а в странице запросто может встретиться подобная последовательность.

Зацените самый правильный регексп для проверки е-мыла (по рфц)
ex-parrot.com/~pdw/Mail-RFC822-Address.html
Guru_eXe пишет:
может это привычка, вот и экранирую

Норм привычка. Я тоже если не уверен в символе (а лезть в доки лень ) экранирую.




Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 26 ноября 2010 05:26 · Поправил: Guru_eXe
· Личное сообщение · #26

Zorn пишет:
Твой например запросто сработает на тексте "1 куча текста 2, восемь>трёх, но < 9", а в странице запросто может встретиться подобная последовательность.

ну да, но автор ничего не говорил, о другом тексте К слову, все предыдущие варианты тоже могут попадаться
Code:
  1. <tr><td>26.11.2010</td></tr><tr><td>Новости</td><td>Администратор</td></tr><tr><td>7:31</td><td>Была хорошая погода</td></tr>



-----
may all your PUSHes be POPed!





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 08 марта 2011 03:39
· Личное сообщение · #27

блиа, только заметил =)
Голден Стэйт - эту строку не тянет - пробел не понимает видимо. Как пофиксить?




Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

Создано: 08 марта 2011 08:25
· Личное сообщение · #28

попробуй заэкранировать пробел




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 08 марта 2011 15:05
· Личное сообщение · #29

чета не получается =(




Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 08 марта 2011 15:16 · Поправил: Guru_eXe
· Личное сообщение · #30

([0-9.]+).+?>([а-яА-Я-\s]+)<.+?>([а-яА-Я-\s]+)<.+?([0-9:]+).{8}>(.*?)<
попробуй

-----
may all your PUSHes be POPed!



. 1 . 2 . >>
 eXeL@B —› Оффтоп —› помогите с регэкспами

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0

   Для печати Для печати