@Zewkin
Я у мамы фронтэндер

Помогите составить регулярное выражение

Господа, добрый день.

Ситуация такая: есть огромная .csvшка на 100+ тысяч записей с домашними адресами людей. Стоит задача к каждому из этих адресов добавить домашний номер телефона. Нашел online справочник, где параметры поиска передаются в GET запросе.

Делаю так —

$fields = fgetcsv($fd) ;
$street = $fields[16];
$dom = $fields[17];
$apt = $fields[19];

$page = file_get_contents('http://minsk.telkniga.com/search/?fio=&ph=&r=3&c=minsk&s='.$street.'&h='.$dom.'&b=&f='.$apt.'');

preg_match_all ('|<td class="number">(.*)</td>|isU', $page, $content2, PREG_SET_ORDER);

$number = $content2['0']['1'];


Работает замечательно, только одно «но» — в справочнике что-то сломано, и если в адресе присутствует корпус, то он ничего не находит. Если задать адрес без корпуса — выводит по очереди «улица Пушкина, д. 1, к. 1, кв. 1», «улица Пушкина, д. 1, к. 2, кв. 1» и так далее. Каждый отдельный результат заключен в <tr> ... </tr>.

Я хочу загружать страницу, искать в ней нужную <tr> ... </tr> c нужным корпусом, записывать то, что получится в переменную, а дальше опять

preg_match_all ('|<td class="number">(.*)</td>|isU', $tr, $content2, PREG_SET_ORDER);


только вместо всей страницы искать уже в найденной строке.

Вопрос: как должно выглядеть регулярное выражение, чтобы из кода страницы вытащить TRку, в которой содержаться символы, например, «к. 1»?

Спасибо заранее.
  • Вопрос задан
  • 3314 просмотров
Пригласить эксперта
Ответы на вопрос 2
Urvin
@Urvin
#<tr>.*?к\. 1.*?</tr>#si
Ответ написан
Комментировать
senneco
@senneco
Можно так:
<tr[^>]*>[^<]*к\. \d+[^<]*?</tr> — найдёт всё tr'ки, которые содержат «к. <число>». А получить их можно, обернув регулярку в () и потом в результате эта tr\ка будет лежать в $1 (по идее — php уже не помню).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы