Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Парсинг кода не пашет, у кого какие будут мысли? (https://forum.antichat.xyz/showthread.php?t=121611)

ruslant 21.05.2009 09:25

Парсинг кода не пашет, у кого какие будут мысли?
 
Всем привет.
В общем есть пага на пхп, а в ней между тегами <body></body> выводятся резерв валют. Вот так:
Код:

<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>

Далее есть парсер этой страницы:

Код:

<? //Парсинг резервов //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]?

iron-viper 21.05.2009 09:55

PHP код:

<? //Парсинг резервов //WMZ, WMR, WME, WMU, WMB, Яндекс.Деньги, RBK Money, Z-Payment    

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

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

krypt3r 21.05.2009 11:10

PHP код:

  preg_match_all ('/aOutLmtValue\[\d+\] = \'([^\']+)\'/'$str$m);
  
print_r ($m[1]); 


ruslant 21.05.2009 14:17

Спасибо, ребят за оперативность, все заработало.

ruslant 23.05.2009 09:04

Мда... все да не все :(
Кто поможет от меня 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, ну то есть одной цифре.

Кто поможет?

wildshaman 23.05.2009 09:28

preg_match ("|OutLmtValue[22] = '(.*?)'|is", $file, $m);
и не парь мозг)

PaCo 23.05.2009 10:07

Цитата:

Сообщение от wildshaman
preg_match ("|OutLmtValue[22] = '(.*?)'|is", $file, $m);
и не парь мозг)

Мдя,
* - квантификатор, означающий ноль или более вхождений
? - квантификатор, означающий ноль либо одно вхождение, квантификатор жадности
да спецсимволы то слешировать надобно - [].

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

ruslant 23.05.2009 10:59

Цитата:

#aOutLmtValue\[\d+\]\s*=\s*'(.*)';#s
Как конкретизировать данные?
d+ выводит массив, а мне необходимо выборочные данные 22, 26, 3 там например.

ruslant 23.05.2009 11:01

Цитата:

preg_match ("|OutLmtValue[22] = '(.*?)'|is", $file, $m);
выдает левый резалт, даже со слешами :(
Думаю РаСо прав насчет квантификаторов.

ruslant 23.05.2009 11:04

5 WMZ актуально! Немного, но стимул есть найти решение :)


Время: 00:22