Как из этой строки: PHP: "55":{"id":19410,"name":"\u0413\u0430\u0433\u0430\u0432\u0442\u0430\u044d","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":472,"oy":147,"offer":"wood","demand":"stone","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460846,"lootable_human":"16.07.12 \u0432 21:47","looted":1342460546},"56":{"id":19411,"name":"\u041a\u043e\u0433\u0430\u0445\u0438\u0434\u0440\u044d\u0439","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":680,"oy":234,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25} выбрать значения "id", "name" и "relation_status"? PHP: preg_match_all ('#"id":([0-9]+),"name":"([^"]+)#i') Так я получаю Id и name... А вот как еще здесь же получить "relation_status"??? Json_decode не подходит...
Подходит, если подойти к тексту правильно: PHP: <?php $str = '{"55":{"id":19410,"name":"\u0413\u0430\u0433\u0430\u0432\u0442\u0430\u044d","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":472,"oy":147,"offer":"wood","demand":"stone","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460846,"lootable_human":"16.07.12 \u0432 21:47","looted":1342460546},"56":{"id":19411,"name":"\u041a\u043e\u0433\u0430\u0445\u0438\u0434\u0440\u044d\u0439","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":680,"oy":234,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}}'; print_r (json_decode ($str, TRUE)); ?> Вывод: Code: Array ( [55] => Array ( [id] => 19410 [name] => Гагавтаэ [dir] => n [expansion_stage] => 3 [x] => 788 [y] => 648 [ox] => 472 [oy] => 147 [offer] => wood [demand] => stone [mood] => 100 [relation_status] => 1 [ratio] => 1.25 [loot] => 1342460846 [lootable_human] => 16.07.12 в 21:47 [looted] => 1342460546 ) [56] => Array ( [id] => 19411 [name] => Когахидрэй [dir] => n [expansion_stage] => 3 [x] => 788 [y] => 648 [ox] => 680 [oy] => 234 [offer] => stone [demand] => wood [mood] => 100 [relation_status] => 0 [ratio] => 1.25 ) )
Это то да, но мне нужно парсить ответ сервера, а он мне присылает вот что: http://narod.ru/disk/56515222001.d06c63ea8...2/Json.doc.html Вот как мне оттуда Json выбрать? Поэтому и пытаюсь регулярку сварганить...
Попробую по другому: Допустим есть несколько строк такого вида: PHP: "50":{"id":16600,"name":"\u0420\u043e\u0441\u0433\u0430\u0432","dir":"n","expansion_stage":3,"x":775,"y":639,"ox":181,"oy":236,"offer":"iron","demand":"wood"} "54":{"id":19409,"name":"\u0420\u043e\u0441\u043d\u043e\u0441\u043a\u043e\u043d\u043e\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":629,"oy":170,"offer":"stone","demand":"wood","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173457,"lootable_human":"13.07.12 \u0432 13:57","looted":1342173157} "52":{"id":18546,"name":"\u0413\u0430\u0432\u043d\u044d\u0439\u043a\u043e\u0434\u0440\u044d\u0439","dir":"n","expansion_stage":4,"x":776,"y":656,"ox":700,"oy":200,"offer":"iron","demand":"wood"} "53":{"id":18550,"name":"\u041d\u043e\u0441\u0445\u0438\u0433\u0430\u0432\u0440\u043e","dir":"n","expansion_stage":4,"x":776,"y":656,"ox":452,"oy":92,"offer":"iron","demand":"wood"} "57":{"id":19412,"name":"\u0422\u0430\u0445\u0438\u0433\u0430","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":694,"oy":296,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25} Как мне выбрать то, что находится между {.....}, но только те, где встречается relation_status... ??? Т.е. оставить только PHP: {"id":19409,"name":"\u0420\u043e\u0441\u043d\u043e\u0441\u043a\u043e\u043d\u043e\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":629,"oy":170,"offer":"stone","demand":"wood","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173457,"lootable_human":"13.07.12 \u0432 13:57","looted":1342173157} {"id":19412,"name":"\u0422\u0430\u0445\u0438\u0433\u0430","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":694,"oy":296,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}
Seganapa PHP: $data = '"50":{"id":16600,"name":"\u0420\u043e\u0441\u0433\u0430\u0432","dir":"n","expansion_stage":3,"x":775,"y":639,"ox":181,"oy":236,"offer":"iron","demand":"wood"} "54":{"id":19409,"name":"\u0420\u043e\u0441\u043d\u043e\u0441\u043a\u043e\u 043d\u043e\u0441","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":629,"oy":170,"offer":"stone","demand":"wood","mood":100,"relation_status":1,"ratio":1.25,"loot":1342173457,"lootable_human":"13.07.12 \u0432 13:57","looted":1342173157} "52":{"id":18546,"name":"\u0413\u0430\u0432\u043d\u044d\u0439\u043a\u043e\u 0434\u0440\u044d\u0439","dir":"n","expansion_stage":4,"x":776,"y":656,"ox":700,"oy":200,"offer":"iron","demand":"wood"} "53":{"id":18550,"name":"\u041d\u043e\u0441\u0445\u0438\u0433\u0430\u0432\u 0440\u043e","dir":"n","expansion_stage":4,"x":776,"y":656,"ox":452,"oy":92,"offer":"iron","demand":"wood"} "57":{"id":19412,"name":"\u0422\u0430\u0445\u0438\u0433\u0430","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":694,"oy":296,"offer":"stone","demand":"wood","mood":100,"relation_status":0,"ratio":1.25}'; $data = explode("\n", $data); $result = array(); foreach($data as $row) { if (stripos($row, 'relation_status')===false) continue; $tmp = explode(':', $row, 2); $result[] = $tmp[1]; } var_dump($result);
Так работает... А как их выбрать отсюда (должно получится 8 строчек, где есть relation_status): http://dl.dropbox.com/u/70752478/Server Request.txt На выходе нужно получить: PHP: {\"id\":19409,\"name\":\"\\u0420\\u043e\\u0441\\u043d\\u043e\\u0441\\u043a\\u043e\\u043d\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":629,\"oy\":170,\"offer\":\"stone\",\"demand\":\"wood\",\"mood\":100,\"relation_status\":1,\"ratio\":1.25,\"loot\":1342173457,\"lootable_human\":\"13.07.12 \\u0432 13:57\",\"looted\":1342173157} {\"id\":19410,\"name\":\"\\u0413\\u0430\\u0433\\u0430\\u0432\\u0442\\u0430\\u044d\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":472,\"oy\":147,\"offer\":\"wood\",\"demand\":\"stone\",\"mood\":100,\"relation_status\":1,\"ratio\":1.25,\"loot\":1342460846,\"lootable_human\":\"16.07.12 \\u0432 21:47\",\"looted\":1342460546} {\"id\":19411,\"name\":\"\\u041a\\u043e\\u0433\\u0430\\u0445\\u0438\\u0434\\u0440\\u044d\\u0439\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":680,\"oy\":234,\"offer\":\"stone\",\"demand\":\"wood\",\"mood\":100,\"relation_status\":0,\"ratio\":1.25} {\"id\":19412,\"name\":\"\\u0422\\u0430\\u0445\\u0438\\u0433\\u0430\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":694,\"oy\":296,\"offer\":\"stone\",\"demand\":\"wood\",\"mood\":100,\"relation_status\":0,\"ratio\":1.25} {\"id\":19413,\"name\":\"\\u0420\\u043e\\u0442\\u0430\\u0440\\u043e\\u0441\\u044d\",\"dir\":\"n\",\"expansion_stage\":4,\"x\":788,\"y\":648,\"ox\":278,\"oy\":208,\"offer\":\"stone\",\"demand\":\"iron\",\"mood\":100,\"relation_status\":1,\"ratio\":1.25,\"loot\":1342460843,\"lootable_human\":\"16.07.12 \\u0432 21:47\",\"looted\":1342460543} {\"id\":19414,\"name\":\"\\u0414\\u043e\\u043d\\u043e\\u0441\\u0433\\u0430\\u0444\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":228,\"oy\":265,\"offer\":\"wood\",\"demand\":\"iron\",\"mood\":100,\"relation_status\":1,\"ratio\":1.25,\"loot\":1342173456,\"lootable_human\":\"13.07.12 \\u0432 13:57\",\"looted\":1342173156} {\"id\":19415,\"name\":\"\\u041d\\u044d\\u0439\\u0440\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":589,\"oy\":365,\"offer\":\"iron\",\"demand\":\"wood\",\"mood\":100,\"relation_status\":0,\"ratio\":1.25} {\"id\":19416,\"name\":\"\\u0421\\u0442\\u0440\\u0430\\u0439\\u043d\\u043e\\u0441\\u043a\\u043e\\u0443\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":788,\"y\":648,\"ox\":772,\"oy\":274,\"offer\":\"stone\",\"demand\":\"wood\",\"mood\":100,\"relation_status\":0,\"ratio\":1.25} Такое возможно?
Так сервер этой игры не может отсылать данные как представляешь ты нам их. Прекрати долбиться х**м об стену и начни понимать что ты делаешь. Все данные в формате json, тебе уже объяснили как с ним работать и не надо никаких регулярок использовать.
Приветствую, нужно спарсить строку вида value="98edd7aab0397c03c1526a0ed00c6a0d Но результат получить без value="
Не понял если честно Решил так: PHP: $message = preg_replace("/(<\/div>.*?<div)/i", '</div><div', $message); $message = preg_replace("/(\{.*?<div)/i", '<div', $message); $message = preg_replace("/(<\/div>[^<div].*})/i", '</div>', $message); { - начало, } - конец изначального $message, выделить начало и конец с помощью ^ и $ почему-то не получилось
Подскажите пожалуйста регулярку, из участка кода <a href="javascript:void(0);" onclick="_cgo('go.php?u=aHR0cDovL3NlYXJ&qq=Y2FzaW5v&stime=1343249248');" target="_self" onmouseout="window.status='';return true;" onmouseover="window.status='www.site.com';return true;">text</a> нужно извлечь только ссылку go.php?u=aHR0cDovL3NlYXJ&qq=Y2FzaW5v&stime=1343249248 таких фрагментов кода в исходнике 15, т. е. получить 15 ссылок в массив. Спасибо.
Со страницы: http://lib.rus.ec/b/386529 Необходимо получить: - Текст Аннотации Пробую так: PHP: /Аннотация<\/h2>(.*)<p><p>(.+)<\/p>/siU Но ничего не выходит
как спарсить значение между первым и шестым <td></td> ? В данном примере это 1) 2) Текст между всеми TD постоянно меняется.
Исходный текст в $str PHP: preg_match_all("#<td>(.*?)<\/td>#", $str, $td); echo $td[1][0]; echo $td[1][5]; Во втором теге TD надо вытаскивать ссылку? Если да, то так: PHP: preg_match_all("#<td>(.*?)<\/td>#", $str, $td); preg_match('/<a href=\"(.*?)\"/', $td[1][5], $l); echo $td[1][0]; echo $l[1];
Как двумя регулярками сделать я знаю. Надо одной. Да и просто парсить данные между <td></td> не надо т.к. таких строк порядка 1000-5000 по этому и указаны <tr> </tr> были
Есть текст - многострочный, в котором есть {текст1|текст2|текст3}. Например: Code: blablabla 11{msg1|txt|msg2}111111{next|go|to}11111111 Нужна регулярка, которая образует массив: [0] => {msg1|txt|msg2} [1] => {next|go|to}