2014-08-26 9 views
0

Для проекта PHP мне нужно получить данные с подержанного автомобильного сайта, на котором нет API. Чтобы вытащить данные, я использую file_get_contents() в PHP, чтобы получить все HTML и регулярное выражение для поиска данных, которые я ищу.проблема с регулярным выражением с php

Это (часть) данных я использую:

<!-- begin Site parameters --> 
sSite="autoscout24.nl"; 
sZone="used_car_detail"; 
adParams ={"make": "9","model": "1624","price": "2","fr": "7","miles": "10","art": "1","ad": "dealer","zip": "NL4264 AT","zip2": "4264 AT","did": "12865153","seal": "146","seg": "de_oem,mass_oem,compact,old_fr,high_miles,low_price,high_hp","hp": "7","acc": "U","vat": "0","fuel": "B","gear": "M","carno": "74RTBJ","carby": "0","ECO": "NO","equi": "1,2,3,5,12,13,17,30,31,32,38,49,126,127","type": "U","cost": "7450","img": "http://pic2.autoscout24.net/images/010/472/0257472010001.jpg","stmak": "Audi","stmod": "A3","sthp": "150","stkw": "110","age": "108","styea": "2005","stmon": "8","stmil": "232375","stccm": "1984","eutax": "0","ken": "74RTBJ","kenteken": "true","carid": "257472010","width": "3","test": "off","rnd": "72"}; 
<!-- end Site parameters --> 

Теперь немного, я хочу, чтобы выбрать это «74RTBJ» (без кавычек). Я пытаюсь использовать

/"ken": "(.*?)",/sig 

, чтобы сделать это, но который выбирает

/"ken": "74RTBJ", 

Как заставить его выбрать только немного я хочу? Опять же, я использую PHP preg_match_all() для поиска данных, я слышал, что это важно.

Спасибо!

+0

HTTP: // regex101 .com/r/yX3eB5/4. Ваше регулярное выражение работает нормально. – vks

+1

Другим подходом было бы получить объект javascript с регулярным выражением, например '/ adParams = (. +?); /', А затем выполнить 'json_decode()' в согласованной группе. – TiMESPLiNTER

+0

@vks Я тоже так думал, но когда я вхожу в то же самое в PHP, он возвращает/"ken": "74RTBJ", –

ответ

0

Просто используйте 'назад или \K в своем регулярном выражении, чтобы соответствовать значению поля Ken,

\bken":\s*"\K[^"]* 

ИЛИ

(?<=\bken": ")[^"]* 

DEMO

1

preg_match_all имеет третий аргумент, который является ссылка на массив согласованных групп. В вашем случае значение в кавычки захватывается под индексом 1.

preg_match_all('/"ken": "(.*?)",/sig', <your-string-here>, $matches); 

А теперь:

$matches[0] == '"ken": "74RTBJ",' 

в то время как

$matches[1] == '74RTBJ' 

Дополнительная информация: http://php.net//manual/pl/function.preg-match-all.php

+0

Не в моем случае по какой-то причине :(В любом случае, я делаю это несколько иначе, и это работает, и поскольку это будет работать для большинства людей, я буду отмечать его как правильное –

Смежные вопросы