PDA

Показать полную графическую версию : [решено] StringRegExp. Вытаскивание повторяющихся кусков кода HTML.


ikif
05-12-2009, 02:17
Есть страничка в которой присутствует относительно повторяющийся код :

...................................
<TH class="bidder "><A href="?m=now&amp;filter=%CA%EE%E6%E1%E0%F7%E8%F9%E0&amp;order=bidder&amp;dir=asc">ставка</A></TH>
<TH class="bid "><A href="?m=now&amp;filter=%CA%EE%E6%E1%E0%F7%E8%F9%E0&amp;order=bid&amp;dir=asc">ставку</A></TH>
<TH class="buy "><A href="?m=now&amp;filter=%CA%EE%E6%E1%E0%F7%E8%F9%E0&amp;order=buy&amp;dir=asc">купить</A></TH></TR>

<TR class=row_1>
[color=blue]
<TD><IMG onmouseover="doItem('11','Количество перепродаж: 7<br />Количество: 1<br />ставка: 3911\n Кол ставок: 8\n Шаг ставки: 111\nНачало : 11:28 11.12.09\n','','0',event,this)" alt=Кожбачища src="images/Arm_6s.jpg">
<TD>Инкогнито<BR><SPAN id=timer_0>0:11:46 </SPAN>
<TD>2345<IMG class=png alt=Золото align=absMiddle src="images/ico_gold1.png"><BR><A href="player.php?id=233333">GaD_On_Line</A>
<TD>1234<IMG class=png alt=Золото align=absMiddle src="images/ico_gold1.png"><BR><SPAN id=bid_0><A onclick=tradeConfirm(this) href="trade.php?m=bid&amp;id=2332133&amp;bid=23433&amp;k=23445"><IMG class=cmd onmouseover="doImage(this,'buttons/b_trade_bid','skip')" alt=Ставка src="images/buttons/b_trade_bid_p.png"></A></SPAN>
</TD>

<TR class=row_2>
<TD><IMG onmouseover="doItem('34','Количество итем: 2<br />Количество: 1<br />ставка: 5432\n Кол-во ставок: 11\n Шаг ставки: 222\аукциона: 45:46 11.12.09\n','','0',event,this)" alt=Кожбачища src="images/Arm_6s.jpg">
<TD>Инкогнито<BR><SPAN id=timer_1>0:11:27 </SPAN>
<TD>4532<IMG class=png alt=Золото align=absMiddle src="images/ico_gold1.png"><BR><A href="player.php?id=2332432">RedGreenUltras</A>
<TD>1345<IMG class=png alt=Золото align=absMiddle src="images/ico_gold1.png"><BR><SPAN id=bid_1><IMG class=cmd alt=Ставка src="images/buttons/b_trade_bid_b.png"></SPAN>
<TD>---- </TD>

<TR class=row_1>
<TD><IMG onmouseover="doItem('23','Количество перепродаж: 9<br />Количество: 1<br />Начальная ставка: 4532\n Кол-во ставок: 13\n Шаг ставки: 4433\nНачало аукциона: 11:39 11.12.09\n','','1',event,this)" alt=Кожбачища src="images/Arm_6s.jpg">
<TD>Инкогнито<BR><SPAN id=timer_2>0:17:48 </SPAN>
<TD>3532<IMG class=png alt=Золото align=absMiddle src="images/ico_gold1.png"><BR><A href="player.php?id=45322">bos7</A>
<TD>2453<IMG class=png alt=Золото align=absMiddle src="images/ico_gold1.png"><BR><SPAN id=bid_2><IMG class=cmd alt=Ставка src="images/buttons/b_trade_bid_b.png"></SPAN>
<TD>---- </TD>

<TR class=row_2>
<TD><IMG onmouseover="doItem('23','Количество перепродаж: 2<br />Количество: 1<br />Начальная ставка: 3432\n Кол-во ставок: 14\n Шаг ставки: 222\nНачало аукциона: 11:20 11.12.09\n','','0',event,this)" alt=Кожбачища src="images/Arm_6s.jpg">
<TD>Инкогнито<BR><SPAN id=timer_3>0:11:58 </SPAN>
<TD>3421<IMG class=png alt=Золото align=absMiddle src="images/ico_gold1.png"><BR><A href="player.php?id=2322143">enot_us</A>
<TD>3242<IMG class=png alt=Золото align=absMiddle src="images/ico_gold1.png"><BR><SPAN id=bid_3><IMG class=cmd alt=Ставка src="images/buttons/b_trade_bid_b.png"></SPAN>
<TD>---- </TD>
<SCRIPT> var timers = new Array();
.....................................



С этого кода надо выцыпить эти повторы поочереди или массивом.
Каждый из повторов я обозначил разным цветом.
Мой экспериментальный код и он не работает :

$nOffset = 2
While 1
$array = StringRegExp($KodHtml, "(?s).*<TD><IMG onmouseover(.*?)></A></SPAN>.*" , 1, $nOffset)
If @error = 0 Then
$nOffset = @extended
Else
;ExitLoop
EndIf
for $i = 0 to UBound($array) - 1
msgbox(0, "RegExp Test with Option 1 - " & $i, $array[$i])
Next
WEnd


Проще говоря , надо получить вначале синий(первый) кусок кода, потом красный, и т.д.


Заранее благодарю.

Creat0R
05-12-2009, 12:46
Слишком общее название темы - такие вопросы появляются часто »

ikif
05-12-2009, 20:59
Не выходит.
Пробовал :
$array = StringRegExp($KodHtml, "(?s)<TD><IMG onmouseover(?:\s?)+(.*?)(?:\s?)+</TD>.*" , 1,$nOffset )

$array = StringRegExp($KodHtml, "(?s).*<TD><IMG onmouseover(?:\s?)+(.*?)(?:\s?)+</TD>.*" , 1,$nOffset )

$array = StringRegExp($KodHtml, "(?s).*?<TD><IMG onmouseover(?:\s?)+(.*?)(?:\s?)+</TD>.*" , 1,$nOffset )

Берет первый повтор и всё...

Creat0R
06-12-2009, 00:24
Не выходит »
Что не выходит, я не на решение указал, а дал предупреждение за нарушение правил:

http://forum.oszone.net/rules.html
В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема). Темы с несодержательными или слишком общими заголовками будут закрываться или переноситься в раздел "Зона тестирования" в зависимости от политики конкретного форума.

ikif
06-12-2009, 01:21
Подправил.
Мне то понятно что я хочу, поэтому не всегда вижу где что умолчал или не обьяснил.
При первом написании старался описать доступно и подробно, но это с моей колокольни мне так кажется.

Creat0R
06-12-2009, 02:33
С этого кода надо выцыпить эти повторы поочереди или массивом.
Каждый из повторов я обозначил разным цветом. »
Что значит "повторы"? Что именно нужно получить на выходе?

Может так:
$sSource = ClipGet (http://www.autoitscript.com/autoit3/docs/functions/ClipGet.htm)() ;В б.обмена содержится текст странички (исходный код)

$sPattern = '(?s).*?<TD><IMG onmouseover=(.*?)>(?:</A>|)</SPAN>.*?'
$aRet = StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sSource, $sPattern, 3)

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 0 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aRet) -1
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, 'Title', $aRet[$i])
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

ikif
06-12-2009, 09:58
Огромнейшее спасибо!!!!

Повторы у меня : весь синий кусок текста , это первый повтор. Следующий повтор- весь синий текст и т.д.

Ещё раз извеняюсь , я просто учусь не на русском языке, поэтому трудно иногда выразиться техническим языком.

То что у меня вышло с вашей помощью :



$sSource = ClipGet() ;В б.обмена содержится текст странички (исходный код)
$nOffset = 2
While 1
$sPattern = '(?s).*?<TD><IMG onmouseover=(.*?)</TD>.*?'
$aRet = StringRegExp($sSource , $sPattern, 1, $nOffset)
If @error = 0 Then
$nOffset = @extended
Else
ExitLoop
EndIf
For $i = 0 To UBound($aRet) -1
MsgBox(64, 'Title', $aRet[$i])
Next
WEnd



Весь секрет оказался в "?" в конце . Перед <TD> я пробовал ставить "?" , не помогало.

Эти $sPattern основная проблема у меня.
Жаль что тут на форуме нет одной темы с подробным описанием и с множеством примеров (даже в русском help не очень понял , что к чему ).

Ещё раз,раз,раз СПАСИБО

Creat0R
06-12-2009, 10:30
Только зачем использовать оффсет и цикл?

Вот тот же результат:
$sSource = ClipGet (http://www.autoitscript.com/autoit3/docs/functions/ClipGet.htm)() ;В б.обмена содержится текст странички (исходный код)

$sPattern = '(?s).*?<TD><IMG onmouseover=(.*?)</TD>.*?'
$aRet = StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sSource, $sPattern, 3)

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 0 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aRet) -1
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, 'Title', $aRet[$i])
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

:)

Жаль что тут на форуме нет одной темы с подробным описанием и с множеством примеров »
Но зато есть поиск (фильтр) - http://forum.oszone.net/forumdisplay.php?f=103&filter_string=regexp&filter_by=title ;)




© OSzone.net 2001-2012