Регулярні вирази

  1. дано
  2. Що ми маємо:
  3. вибірка записи
  4. поля джерела
  5. Посилання:

Обробка регулярним виразом отриманих даних доступна вже давно, завдяки такій карколомної функціональності Fenom. А з версії 1.3.0 регулярки були впроваджені:

  1. в конфігурацію завдання при вказівці записи селектора,
  2. в поля джерела.

Користувачеві це дає більш гнучку вибірку записів з джерела.

Опишу приклад того, як я перекручували за допомогою регулярок в xParser.

дано

Виникла потреба розпарсити сайт, що має дивну структуру записів. На CSS або XPath синтаксисі до них було підібратися. Приклад дивною структури:

<Div class = content> <p> <h2> Якийсь заголовок </ h2> Текст з описом розділу <p> 18.01.10 <a href="http://domain.zone/link1.html"> Запис 1 </a> <br> Опис записи 1 <p> 24.12.09 <a href="http://domain.zone/link2.html"> Запис 2 </a> <br> Опис записи 2 <p> 23.12 .09 <a href="http://domain.zone/link3.html"> Запис 3 </a> <br> Опис записи 3 <p> 22.12.09 <a href = "http://domain.zone /link4.html">Запісь 4 </a> <br> Опис записи 4 ... </ div>

Що ми маємо:

  1. Запис не міститься в окремому контейнері. Звідси складність отримати її. Можна вирішити за рахунок регулярки!
  2. Теги <p> в кожному записі відкриті, але не закриті. Вирішується внутрішніми засобами xParser без вашої участі!
  3. Тег <br> може стояти, як відразу після посилання, так і на наступному рядку під нею. Можна вирішити за рахунок регулярки!

Версія xParser нижче 1.3.0 не справлялася з цим, чесно скажемо ...

вибірка записи

Як завжди, ми створюємо завдання. Тільки тепер при вказівці селектора записи в конфігурації завдання, ми можемо вибрати синтаксис, серед яких: CSS, XPath, RegExp. Нам потрібні регулярні вирази!

Ось таку регулярку я склав для вибірки записів з дивною структури:

/<p>\s?([0-9]{2}\.[0-9]{2}\.[0-9]{2}) &lt;a href = "([^"] +) " > (. +) <\ / a> \ s? &lt;br> \ s? (. *) \ s? <\ / p> / ui

Таким чином ми отримаємо кожну запис на сторінці. Всього їх було близько 100 шт.

поля джерела

Після чого нам треба розпарсити поля джерела. Це я теж реалізував на регулярних виразах:

Посилання:

  • Синтаксис = RegExp
  • Ключ = link
  • Селектор: /<a.*href="([^"]+)/ui

Дата:

  • Синтаксис = RegExp
  • Ключ = date
  • Селектор = /<p>\s?([0-9]{2}\.[0-9]{2}\.[0-9]{2})/ui

опис:

  • Синтаксис = RegExp
  • Ключ = description
  • Селектор = /<p>\s?[0-9]{2}\.[0-9]{2}\.[0-9]{2} <a href="[^"]+">. + <\ / a> \ s? &lt;br> \ s? (. *) \ s? <\ / p> / ui

Разом

За допомогою регулярних виразів можна парсити навіть найскладнішу структуру. Тому всім раджу вивчати регулярки, хоча б на тому рівні, на якому знаю їх я.

Lt;a href = "([^"] +) " > (. +) <\ / a> \ s?
Lt;br> \ s?
S?
S?