Парсинг кода не пашет, у кого какие будут мысли?

Discussion in 'PHP' started by ruslant, 21 May 2009.

  1. ruslant

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

    Joined:
    19 Oct 2007
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    Всем привет.
    В общем есть пага на пхп, а в ней между тегами <body></body> выводятся резерв валют. Вот так:
    Code:
    <form action='index.php' method='post'>
    <script language="JavaScript" src="scripts/common.js" type="text/javascript"></script>
    <script language="JavaScript" type="text/javascript">           <!--         	var aName = new Array();         	
    var aIncCnt = new Array();         	
    var aOutCnt = new Array();         	
    var aOutLmtValue = new Array();                      
    
    aName[0] = 'PCR_RuPayR';  
    aIncCnt[0] = '1.00'; 
    aOutCnt[0] = '0.94'; 
    aOutLmtValue[0] = '86754.48'; 
    
    aName[1] = 'PCR_WMR';  
    aIncCnt[1] = '1.00'; 
    aOutCnt[1] = '0.86'; 
    aOutLmtValue[1] = '1100000.00'; 
    
    aName[2] = 'PCR_WMZ';  
    aIncCnt[2] = '1.00'; 
    aOutCnt[2] = '0.027'; 
    aOutLmtValue[2] = '39000.00';
    
    -->
    </script>
    Далее есть парсер этой страницы:

    Code:
    <? //Парсинг резервов //WMZ, WMR, WME, WMU, WMB, Яндекс.Деньги, RBK Money, Z-Payment  
    
    $file = file_get_contents("тра-лял-ля урл"); 
    preg_match ('#aOutLmtValue[2]=([^"]*)#is', 
    $file, $m); 
    echo $m[1]; 
    ?>
    
    Извиняюсь за нубский вопрос, что здесь не так?
    Как можно вывести значение 39.000 переменной из массива aOutLmtValue[2]?
     
  2. iron-viper

    iron-viper Elder - Старейшина

    Joined:
    13 Nov 2007
    Messages:
    167
    Likes Received:
    45
    Reputations:
    3
    PHP:
    <? //Парсинг резервов //WMZ, WMR, WME, WMU, WMB, Яндекс.Деньги, RBK Money, Z-Payment    

    $file file_get_contents("тра-лял-ля урл");  
    preg_match ('/aOutLmtValue\\[2[^\'|"]*[\'|"]([^\'|"]*)/'$file$m);  
    echo 
    $m[1]; 
    ?>

    Как то так. Если я правильно понял выдирать нужно только последний результат... если все то скажи или сам допиши если понимаешь как
     
  3. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    PHP:
      preg_match_all ('/aOutLmtValue\[\d+\] = \'([^\']+)\'/'$str$m);
      
    print_r ($m[1]);
     
  4. ruslant

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

    Joined:
    19 Oct 2007
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    Спасибо, ребят за оперативность, все заработало.
     
  5. ruslant

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

    Joined:
    19 Oct 2007
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    Мда... все да не все :(
    Кто поможет от меня 5 WMZ за потраченное время.

    Трабл такой:

    1) Когда допустим значение [x] = 21 или 121, т.е. не одна цифра, а две или три, то выдает совсем не тот результат.

    Кусок исходника с которого нужно парсить инфу:
    aName[22] = 'PCR_WMZ';
    aIncCnt[22] = '1.00';
    aOutCnt[22] = '0.027';
    aOutLmtValue[22] = '39000.00';

    Вместо 39000.00 в общем вываливает 144000.00 или левые циферки.

    Я конечно понимаю, что собака зарыта здесь:

    preg_match ('/aOutLmtValue\\[22[^\'|"]*[\'|"]([^\'|"]*)/', $file, $m);

    Но честно говоря с регепсами сталкиваюсь в первые и такое количество знаков пунктуации вообще не осиливает мозг.

    2) Берем другую переменную, например
    aOutCnt[22] = '0.027';
    Парсим так я уже понимаю:
    preg_match ('/aOutCnt\\[22[^\'|"]*[\'|"]([^\'|"]*)/', $file, $m);
    Пытаюсь вывести значение этой переменной, выдает также левые цифры, причем даже когда [x]=2, ну то есть одной цифре.

    Кто поможет?
     
    #5 ruslant, 23 May 2009
    Last edited: 23 May 2009
  6. wildshaman

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

    Joined:
    16 Apr 2008
    Messages:
    477
    Likes Received:
    483
    Reputations:
    99
    preg_match ("|OutLmtValue[22] = '(.*?)'|is", $file, $m);
    и не парь мозг)
     
  7. PaCo

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

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Мдя,
    * - квантификатор, означающий ноль или более вхождений
    ? - квантификатор, означающий ноль либо одно вхождение, квантификатор жадности
    да спецсимволы то слешировать надобно - [].

    #aOutLmtValue\[\d+\]\s*=\s*'(.*)';#s
     
  8. ruslant

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

    Joined:
    19 Oct 2007
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    Как конкретизировать данные?
    d+ выводит массив, а мне необходимо выборочные данные 22, 26, 3 там например.
     
  9. ruslant

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

    Joined:
    19 Oct 2007
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    выдает левый резалт, даже со слешами :(
    Думаю РаСо прав насчет квантификаторов.
     
  10. ruslant

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

    Joined:
    19 Oct 2007
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    5 WMZ актуально! Немного, но стимул есть найти решение :)
     
  11. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    PHP:
    preg_match_all ('/aOutLmtValue\[(0|2)\]\s*=\s*\'(\d+\.\d{2})\';/'$str$m);
    print_r ($m[2]);
    В регулярке поменять (0|2) на свои цифры, к примеру, (22|26|3)
     
    1 person likes this.
  12. ruslant

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

    Joined:
    19 Oct 2007
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    Спасиб за помощь ребят, но не фига не получилось :( попробую заюзать Simple HTML DOM Parser.
     
  13. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Как угодно, у нас все работало
     
  14. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    смысла проблемы не понел =\

    PHP:
    preg_match_all("#aOutLmtValue\[(0|1|2)\]\s=\s'(.+)';#i"$file$m);
    print_r($m[2]);


    или если тут aOutLmtValue[2] может быть любая цифра, то так:

    PHP:
    preg_match_all("#aOutLmtValue\[[0-9]+\]\s=\s'(.+)';#i"$file$m);
    print_r($m[1]);