Вопрос по парсингу

Discussion in 'PHP' started by Seganapa, 13 Jul 2012.

  1. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Всем доброго дня!

    В ответ на Get запрос сервер мне присылает код:
    HTML:
    .....{\"id\":\"Aw4Cgww=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":12,\"ox\":194,\"oy\":355},\"AwgCkAI=\":{\"id\":\"AwgCkAI=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":2,\"ox\":325,\"oy\":79},\"Aw4CgwQ=\":{\"id\":\"Aw4CgwQ=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":4,\"ox\":814,\"oy\":221},\"Aw4CgwM=\":{\"id\":\"Aw4CgwM=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":3,\"ox\":748,\"oy\":153},\"AwgCkAs=\":{\"id\":\"AwgCkAs=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":11,\"ox\":789,\"oy\":326},\"AwgCkAU=\":{\"id\":\"AwgCkAU=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":5,\"ox\":536,\"oy\":122},\"AwgCkBE=\":{\"id\":\"AwgCkBE=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":17,\"ox\":275,\"oy\":373},\"AwgCkA0=\":{\"id\":\"AwgCkA0=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":13,\"ox\":650,\"oy\":393},\"Aw4CgwA=\":{\"id\":\"Aw4CgwA=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":0,\"ox\":553,\"oy\":137},\"AwgCkAY=\":{\"id\":\"AwgCkAY=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":6,\"ox\":638,\"oy\":125},\"Aw4Cgw0=\":{\"id\":\"Aw4Cgw0=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":13,\"ox\":128,\"oy\":288},\"Aw4CgxM=\":{\"id\":\"Aw4CgxM=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":19,\"ox\":259,\"oy\":200},\"Aw4CgxA=\":{\"id\":\"Aw4CgxA=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":16,\"ox\":332,\"oy\":106},\"37\":{\"id\":18394,\"name\":\"<red>\\u0413\\u0430\\u0432\\u0438\\u0444\</red>",\"dir\":\"n\",\"expansion_stage\":2,\"x\":782,\"y\":643,\"ox\":211,\"oy\":180,\"offer\":\"iron\",\"demand\":\"stone\"},\"38\":{\"id\":18395,\"name\":\"\\u0413\\u0430\\u0432\\u0440\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":1,\"x\":782,\"y\":643,\"ox\":397,\"oy\":392,\"offer\":\"wood\",\"demand\":\"stone\"},\"39\":{\"id\":18397,\"name\":\"\\u042d\\u0434\\u043e\",\"dir\":\"n\",\"expansion_stage\":2,\"x\":782,\"y\":643,\"ox\":399,\"oy\":325,\"offer\":\"stone\",\"demand\":\"wood\"},\"40\":{\"id\":18398,\"name\":\"\\u0425\\u0438\\u043a\\u0438\\u0440\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":782,\"y\":643,\"ox\":258,\"oy\":325,\"offer\":\"wood\",\"demand\":\"stone\"},\"41\":{\"id\":18400,\"name\":\"\\u041a\\u043e\\u0443\\u0441\\u0444\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":782,\"y\":643,\"ox\":738,\"oy\":236,\"offer\":\"stone\",\"demand\":\"wood\"},\"42\":{\"id\":18545,\"name\":\"\\u041d\\u044d\\u0439\\u044d\\u0433\\u0430\",\"dir\":\"n\",\"expansion_stage\":1,\"x\":776,\"y\":656,\"ox\":536,\"oy\":361,\"offer\":\"wood\",\"demand\":\"stone\"},\"43\":{\"id\":18547,\"name\":\"\\u041a\\u0438\\u0440\\u043e\\u0441\\u0444\\u043e\\u0441\\u043a\\u043e\",\"dir\":\"n\",\"expansion_stage\":1,\"x\":776,\"y\":656,\"ox\":686,\"oy\":336,\"offer\":\"stone\",\"demand\":\"wood\"},\"44\":{\"id\":18548,\"name\":\"\\u041a\\u043e\\u0443\\u0441\\u0440\\u043e\\u0441\\u0442\\u0430\\u0444\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":4,\"x\":776,\"y\":656,\"ox\":576,\"oy\":175,\"offer\":\"iron\",\"demand\":\"wood\"},\"45\":{\"id\":18549,\"name\":\"\\u0413\\u0430\\u0432\\u0441\\u0442\\u0440\\u0430\\u0439\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":776,\"y\":656,\"ox\":363,\"oy\":336,\"offer\":\"wood\",\"demand\":\"stone\"},....
    
    Код очень большой, поэтому выложил кусочек...

    Как мне ПРАВИЛЬНО спарсить "id и "name?
    Может воспользоваться какой-нибудь библиотекой или все-таки регуляркой???

    Посоветуйте что почитать, где искать?

    [​IMG]
     
  2. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Читать про Json как прочтешь поймешь что тебе вообще нечего не надо парсить, а всего лишь серилозоватиь json данные в обект\массив, и нужное взять по индексу, json_decode, json_encode.
     
  3. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Не получается декодировать Json...
    Синтаксическая ошибка, не корректный JSON

    Как такое может быть? Если этот Json мне сервер отсылает?

    Пожалуйста помогите разобраться

    PHP:
    <?php
    header
    ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0"false);
    header("Content-Type: text/html; charset=utf-8");
    header("Pragma: no-cache");

    error_reportingE_ALL );

    $url 'http://ru.grepolis.com';
    $urlTo_start_page 'http://ru.grepolis.com/start/index?action=login_from_start_page';
    $urlTo_start_page_next 'http://ru.grepolis.com/start/index?action=fetch_news';
    $urlTo_login_to_game 'http://ru.grepolis.com/start?action=login_to_game_world';

    $name 'Tartang'// Логин
    $password '7TXzMQvUZt3qUqh'// Пароль

    define('ROOT'dirname(__FILE__).'/');

    $cookie_filename ROOT uniqid(md5(time()), true).'.tmp';

    // Настройка курла
    $curl curl_init();
    curl_setopt($curlCURLOPT_RETURNTRANSFER1);
    curl_setopt($curlCURLOPT_TIMEOUT30 );
    curl_setopt($curlCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 6.0; en; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1');
    curl_setopt($curlCURLOPT_COOKIEFILE$cookie_filename);
    curl_setopt($curlCURLOPT_COOKIEJAR$cookie_filename);
    curl_setopt($curlCURLOPT_SSL_VERIFYHOST1);
    curl_setopt($curlCURLOPT_SSL_VERIFYPEER0);
    curl_setopt($curlCURLOPT_FOLLOWLOCATION1);

    curl_setopt($curlCURLOPT_REFERER'http://google.com' );
    curl_setopt($curlCURLOPT_URL$url);
    $html curl_exec($curl); // Запускаем курл, что бы получить куки 

    $post 'json={"name":"' $name '","password":"' $password '","passwordhash":"","autologin":false}';

    curl_setopt($curlCURLOPT_URL$urlTo_start_page);
    curl_setopt($curlCURLOPT_REFERER$url );
    curl_setopt($curlCURLOPT_POSTtrue);
    curl_setopt($curlCURLOPT_POSTFIELDS$post);
    $html curl_exec($curl);

    $post 'json={}';
    curl_setopt($curlCURLOPT_URL$urlTo_start_page_next);
    curl_setopt($curlCURLOPT_REFERER$urlTo_start_page );
    curl_setopt($curlCURLOPT_POSTtrue);
    curl_setopt($curlCURLOPT_POSTFIELDS$post);
    $html curl_exec($curl);

    $post 'world=ru11&facebook_session=&facebook_login=&gift_key=portal_sid=name=' $name '&password=' $password;

    curl_setopt($curlCURLOPT_URL$urlTo_login_to_game );
    curl_setopt($curlCURLOPT_REFERER$urlTo_start_page_next );
    curl_setopt($curlCURLOPT_POSTtrue);
    curl_setopt($curlCURLOPT_POSTFIELDS$post);
    $html curl_exec($curl);

    preg_match("#Game\.csrfToken = '(\S+)'#"$html$token); 
    //print $token[1];
    $time explode(' 'microtime());
    $timef $time[1] . substr($time[0], 23);
    //print $timef;
    //print $token[1];


    // Проверка Json
    $json[] = $html;

    foreach (
    $json as $string) {
        echo 
    'Декодируем: ' $string;
        
    json_decode($string);

        switch (
    json_last_error()) {
            case 
    JSON_ERROR_NONE:
                echo 
    ' - Ошибок нет';
            break;
            case 
    JSON_ERROR_DEPTH:
                echo 
    ' - Достигнута максимальная глубина стека';
            break;
            case 
    JSON_ERROR_STATE_MISMATCH:
                echo 
    ' - Некорректные разряды или не совпадение режимов';
            break;
            case 
    JSON_ERROR_CTRL_CHAR:
                echo 
    ' - Некорректный управляющий символ';
            break;
            case 
    JSON_ERROR_SYNTAX:
                echo 
    ' - Синтаксическая ошибка, не корректный JSON';
            break;
            case 
    JSON_ERROR_UTF8:
                echo 
    ' - Некорректные символы UTF-8, возможно неверная кодировка';
            break;
            default:
                echo 
    ' - Неизвестная ошибка';
            break;
        }

        echo 
    PHP_EOL;
    }



    curl_close($curl); // Завершаем сеанс

    ?> 

     
  4. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Убери оттуда лишние кавычки stripslash мб.
     
  5. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Видимо дело не только в синтаксисе Json

    В коде встречаются и такие куски:
    PHP:
    {\"x\":795,\"y\":657,\"id\":195964,\"type\":52,\"res\":\"Iw\",\"neighbours\":[\"52298380\",\"51708558\",\"52167317\"]}],\"wonders\":[],\"presents\":[]}],\"night\":false}\t);\n\n\tMapDuration.duration_offset = 900;\n\tMapDuration.naval_speed_bonus_factor = 1;\n\tHolidays.init([]);\n }\n\/\/]]>\n<\/script>\n\n<div id=\"map_wrapper\">\n\t<div id=\"map\">\n\t\t<div id=\"map_move_container\" style=\"position:absolute; top:0px; left:0px; z-index:1;\">\n\t\t\t<div id=\"map_tiles\" style=\"position:absolute; top:0px; left:0px; z-index:1;\"><\/div>\n\t\t\t<div id=\"map_islands\" style=\"position:absolute; top:0px; left:0px; z-index:4;\"><\/div>\n\t\t\t<div id=\"map_towns\" style=\"position:absolute; top:0px; left:0px; z-index:5;\">\n\t\t\t\t<a id=\"towndummy\" class=\"tile nw lvl3\"><\/a>\n\t\t\t<\/div>\n\t\t\t<div id=\"map_wonders\" style=\"position:absolute; top:0px; left:0px; z-index:4;\">\n\t\t\t\t<a id=\"wonderdummy\" class=\"tile empty\"><\/a>\n\t\t\t<\/div>\n\t\t\t<div id=\"map_presents\" style=\"position:absolute; top:0px; left:0px; z-index:4;\"><\/div>\n\t\t\t<div id=\"map_night\"><\/div>\n\t\t\t<div id=\"mouse_coordinate_popup\" style=\"display:none;\">\n\t\t\t\t<div id=\"town_direction_wrapper\">\n\t\t\t\t\t<div id=\"town_direction\"><\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div id=\"minimap_canvas\">\n\t<div id=\"minimap\">\n\t\t<div id=\"minimap_islands_layer\">\n\t\t<\/div>\n\t<\/div>\n\t<div id=\"minimap_click_layer\"><\/div>\n<\/div>","mtime":1342194349},"bar":{"data":{"current_god_favor_production":0,"production":{"wood":51,"stone":37,"iron":37},"resources":{"wood":3322,"stone":2182,"iron":4626},"storage":6241,"resources_contraints":{"plenty"
    А можно как-нибудь вычленить именно Json???
     
  6. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Ребята, сам не разберусь... Помогите плиз!

    Вложение полный код, который присылает мне сервер...
    http://narod.ru/disk/56515222001.d06c63ea8...2/Json.doc.html
    Я пометил нужный блок красным цветом, в нем мне нужно выбрать значения "id" и "name"...

    Может как-то в несколько этапов парсить?
    Помогите пожалуйста...

    Топчусь на месте...
     
  7. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    можешь регулярку запилить. первую по буквам id . до первой запятой. и потом числа второй регуляркой выбрать. name каким нить таким же макаром( я его не смотрел) . но вообще разберись лучше в json . так как регулярка в этом случае это решение на "отстань"
     
  8. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Думаю регуляркой Json вычленить (тока не знаю как), а потом бы уже json_decode...

    Помогите выдернуть Json плиз...
     
  9. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    не не. тут либо одно либо другое. ну что то типа /^id\":[0-9]*$/ должно вернуть тебе id\":195964 . и потом 0-9 чисто числа. или a-zA-Z0-9 и числа и буквы. это id . как то так же name. гугли регулярки если хочешь так. или посмотри как в javascript eval применяют к json. там еще одну скобку добавляют. добавь и ты и все будет гуд наверное. но вообще я тебе скажу что работать в json я бы тебе не советовал. я не то что гуру в нер. но фиг его знает что они туда засунули. а ты decode делаешь . повторюсь не сильно я спец в этом. но хорошо если там php массив лежал . а если там какая нить коллекция или что нить еще чего php в принципе не понимает. кста именно поэтому у тебя может быть ошибка. что твой php не понимает что там лежит . так что все же делай регулярку. json это для удобной работы javascript а не для php. так что я все же склонен тебе советовать регулярку в итоге
     
    #9 barnaki, 15 Jul 2012
    Last edited: 15 Jul 2012
  10. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    PHP:
    preg_match_all('|id":([0-9]+),"name":"([^"]+)|i',str_replace('u0','\u0',stripcslashes($html)),$out);
    for(
    $i=0;$i<count($out[1]); $i++){
        echo 
    $out[1][$i].' - '.$out[2][$i].'<br/>';
    }
    вместо своего json поставь

    на выходе такое

     
  11. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Bars, спасибо огромное! Плюсик поставил...

    Я только сейчас догнал... Можно как-нибудь добавить в твою регулярку поиск relation_status и его значение...

    В общем в этом коде есть 8 элементов с relation_status, вот мне и нужны значения "Id" "name" и "relation_status" этих 8 строчек...

    Блин, никак не могу освоить регулярки... Кучу литературы перечитал, без практики трудно, начинаю понимать только после того, как кто-нибудь пример приведет...
     
  12. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    PHP:
    preg_match_all('|id":([0-9]+),"name":"([^"]+)([^}]+)|i',str_replace('u0','\u0',stripcslashes($html)),$out);
    for(
    $i=0;$i<count($out[1]); $i++){
        
    $status='';
        
    preg_match('|relation_status":([0-9]),|i',stripcslashes($out[3][$i]),$status);
        if(
    $status[1]!=''){ 
            
    $stat=' - '.$status[1];
        }
        echo 
    $out[1][$i].' - '.$out[2][$i].$stat.'<br/>';
    }
    в эту регулярку пихать не стал, создал вторую, которая на выходе первой осуществляет поиск на наличие relation_status если находит то забивает ее в $status[1]


    ну и проверка есть $status[1] не пуста то допишем кусочек кода (и кодом назвать то сложно).. доведи до ума. я не умелец писать код красиво с 0. я пишу - потом переписываю =)))

    на выходе такое

    конструктор регулярок http://www.pcre.ru/eval/ забей в закладки - тема!
     
  13. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    если в первом моем примере резулярку изменить на
    PHP:
     preg_match_all('|id":([0-9]+),"name":"([^"]+)(.*)relation_status":([0-9]),|i',str_replace('u0','\u0',stripcslashes($html))  ,$out);
    то в $out[4][$i] будет relation_status, то тогда будут выведены не все строчки, а только те, в которых присутствует relation_status
     
  14. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Спасибо, именно то, что нужно!!! Когда я уже разберусь в этих регулярках... (((

    Блин, дела же так, только вместо "*" - "+" ставил...
     
  15. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Что-то опять не так...

    PHP:
    preg_match_all('|id":([0-9]+),"name":"([^"]+)(.*)relation_status":([0-9]),|i',str_replace('u0','\u0',stripcslashes($html)), $out);  
    for(
    $i=0;$i<count($out[1]); $i++){ 
       echo 
    $out[1][$i].' - '.$out[2][$i].' - '.$out[4][$i].'<br/>'
    }
    Выводит:

    52646 - MEN - 0

    Всего одну строчку (а должен 8)... И в этой строке вообще нет relation_status
     
    #15 Seganapa, 16 Jul 2012
    Last edited: 16 Jul 2012
  16. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    не проверял.. хотя по идеи :([0-9]),|i на :([0-9]),|Ui должно сработать... лень мне уже... у меня уже пол двенадцатого ночи..

    вот так сделай если тоже лень

    PHP:
    preg_match_all('|id":([0-9]+),"name":"([^"]+)([^}]+)|i',str_replace('u0','\u0',stripcslashes($html)),$out);
    for(
    $i=0;$i<count($out[1]); $i++){
        
    $status='';
        
    preg_match('|relation_status":([0-9]),|i',stripcslashes($out[3][$i]),$status);
        if(
    $status[1]!=''){ 
            echo 
    $out[1][$i].' - '.$out[2][$i].' - '.$status[1].'<br/>';
        }
    }
    но лучше все же сделать нормальную регулярку.. скрипт быстрей отработает и меньше будет
     
  17. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Значения ID и Name удается выдернуть...
    Но мне нужно, чтобы еще и значение relation_status выдергивалось... Только вот то, что находится между Name и relation_status может меняться... Как заменить изменяемые символы и не включать их в массив? Пробовал (.*), но на выходе такая билеберда...

    В общем как из этого выбрать только Id name и relation_status, а все остальное исключить?

    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},
     
  18. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    В общем мне нужно из ответа сервера (выкладываю .txt, так как код оч. длинный):

    http://phpforum.ru/html/counter/counter.php?link=http://narod.ru/disk/56802785001.cc91b1bbc74fad759f9fff44c6a3f059/Json.txt.html
    Выбрать это:
    PHP:
    "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},\"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},\"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},\"58\":{\"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},\"59\":{\"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},\"60\":{\"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},\"61\":{\"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}
    т.е. те строки, где есть relation_status

    И на выходе получить примерно это:
    PHP:
    19409 - \\u0420\\u043e\\u0441\\u043d\\u043e\\u0441\\u043a\\u043e\\u043d\\u043e\\u0441 1
    19410 
    - \\u0413\\u0430\\u0433\\u0430\\u0432\\u0442\\u0430\\u044d 1
    19411 
    - \\u041a\\u043e\\u0433\\u0430\\u0445\\u0438\\u0434\\u0440\\u044d\\u0439 0
    19412 
    - \\u0422\\u0430\\u0445\\u0438\\u0433\\u0430 0
    19413 
    - \\u0420\\u043e\\u0442\\u0430\\u0440\\u043e\\u0441\\u044d 1
    19414 
    - \\u0414\\u043e\\u043d\\u043e\\u0441\\u0433\\u0430\\u0444\\u043e\\u0441 1
    19415 
    - \\u041d\\u044d\\u0439\\u0440\\u043e\\u0441 0
    19416 
    - \\u0421\\u0442\\u0440\\u0430\\u0439\\u043d\\u043e\\u0441\\u043a\\u043e\\u0443\\u0441 0
    Т.е. мне нужно выбрать ТОЛЬКО те значения ID и Name, где есть relation_status...

    Мне бы помогло что-то типа этого:
    PHP:
    '#"id":([0-9]+),"name":"([^"]+).*"relation_status":([0-9]+)#i'
    Но .* срабатывает не так как нужно...
    Пробовал и .*? все не то...

    Я пытаюсь .* заменить группу символов стоящих между значением name и relation_status, но не получается...
     
    #18 Seganapa, 17 Jul 2012
    Last edited: 17 Jul 2012