Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] StringRegExp. Вытаскивание повторяющихся кусков кода HTML. (http://forum.oszone.net/showthread.php?t=159230)

ikif 05-12-2009 02:17 1287153

StringRegExp. Вытаскивание повторяющихся кусков кода HTML.
 
Есть страничка в которой присутствует относительно повторяющийся код :

читать дальше »
...................................
<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>
[color=blue]
<TR class=row_1>

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

Цитата:

Цитата Creat0R
Слишком общее название темы - такие вопросы появляются часто »


ikif 05-12-2009 20:59 1287622

Не выходит.
Пробовал :
$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 1287741

Цитата:

Цитата ikif
Не выходит »

Что не выходит, я не на решение указал, а дал предупреждение за нарушение правил:

http://forum.oszone.net/rules.html
Цитата:

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

ikif 06-12-2009 01:21 1287773

Подправил.
Мне то понятно что я хочу, поэтому не всегда вижу где что умолчал или не обьяснил.
При первом написании старался описать доступно и подробно, но это с моей колокольни мне так кажется.

Creat0R 06-12-2009 02:33 1287794

Цитата:

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

Что значит "повторы"? Что именно нужно получить на выходе?

Может так:
Код:

$sSource = ClipGet() ;В б.обмена содержится текст странички (исходный код)

$sPattern = '(?s).*?<TD><IMG onmouseover=(.*?)>(?:</A>|)</SPAN>.*?'
$aRet = StringRegExp($sSource, $sPattern, 3)

For $i = 0 To UBound($aRet) -1
    MsgBox(64, 'Title', $aRet[$i])
Next


ikif 06-12-2009 09:58 1287846

Огромнейшее спасибо!!!!

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

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

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

Код:


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

Только зачем использовать оффсет и цикл?

Вот тот же результат:
Код:

$sSource = ClipGet() ;В б.обмена содержится текст странички (исходный код)

$sPattern = '(?s).*?<TD><IMG onmouseover=(.*?)</TD>.*?'
$aRet = StringRegExp($sSource, $sPattern, 3)

For $i = 0 To UBound($aRet) -1
    MsgBox(64, 'Title', $aRet[$i])
Next

:)

Цитата:

Цитата ikif
Жаль что тут на форуме нет одной темы с подробным описанием и с множеством примеров »

Но зато есть поиск (фильтр) - http://forum.oszone.net/forumdisplay...ilter_by=title ;)


Время: 21:12.

Время: 21:12.
© OSzone.net 2001-