Что нового

Как выбрать текст между тегами?

BETAJIb

Новичок
Сообщения
34
Репутация
0
есть вот такой код:
Код:
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"><html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><link rel="stylesheet" href="styles/main1.css" type="text/css"><title>Фентезиум</title></head><body bgcolor=#FFFFF0 text=#000000 link=#0000FF vlink=#0000FF><div style="text-align:left;font-family: Times New Roman, sans-serif, Tahoma;"><b><font color=#FF0000>Идёт бой! Раунд 1. До конца раунда 180 секунд.</font>
Килер ж.5328/5328 м.12/12</b>
<a href="main.php?blok=fight&do=boi&id=216&hm=1&rnd=255564">Нападает Вася ур.106 ж.2226/2226 м.0/0</a>
<i>Вася ударил противника Килер с точностью 1531.</i>
<a href="main.php?blok=fight&do=boi&doo=4&id=15806&hm=1&rnd=255564">Закончить ход</a>
<a href="main.php?blok=fight&do=mir&rnd=255564">Обновить</a>
<a href="main.php?blok=statistika&do=1&doo=6593904&rnd=255564">Лог боя</a>
<u><b>Другие цели:</b></u>
<a href="main.php?blok=bots&rnd=255564">Существа(1)</a>
<a href="main.php?blok=chat&rnd=255564">Чат</a>

<div style="text-align:center;background:#436EEE;">=© Created by <font color=#FF0000>Alek</font>, 2008=</div></body></html>
как из него вырезать то что будет между
Код:
<a href="main.php?blok=fight&do=boi&id=216&hm=1&rnd=255564">Нападает Вася ур.106 ж.2226/2226 м.0/0</a>
<i>
это типа "Нападает Вася ур.106 ж.2226/2226 м.0/0" и потом нажать на него?
 
Автор
B

BETAJIb

Новичок
Сообщения
34
Репутация
0
Нападает Вася ур.106 ж.2226/2226 м.0/0
у меня эта ссылка будет полность меняться всегда....и нету класса...из-за этого я не могу так сделать...
 
Автор
B

BETAJIb

Новичок
Сообщения
34
Репутация
0
пробывал так
Код:
$sHTML=_IEBodyReadHTML($oIE)
$aTemp = StringRegExp($sHTML, '*>(.*?)</a>
<i>', 3)
MsgBox(0,'',$aTemp)
но оно что то не работает...выдает 1 и все...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
http://autoit-script.ru/index.php/topic,4052.0.html
 
Автор
B

BETAJIb

Новичок
Сообщения
34
Репутация
0
есть вот такой код:
Код:
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"><html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><link rel="stylesheet" href="styles/main1.css" type="text/css"><title>Фентезиум</title></head><body bgcolor=#FFFFF0 text=#000000 link=#0000FF vlink=#0000FF><div style="text-align:left;font-family: Times New Roman, sans-serif, Tahoma;"><b><font color=#FF0000>Идёт бой! Раунд 1. До конца раунда 180 секунд.</font>
Килер ж.5328/5328 м.12/12</b>
<a href="main.php?blok=fight&do=boi&id=216&hm=1&rnd=255564">Нападает Вася ур.106 ж.2226/2226 м.0/0</a>
<i>Вася ударил противника Килер с точностью 1531.</i>
<a href="main.php?blok=fight&do=boi&doo=4&id=15806&hm=1&rnd=255564">Закончить ход</a>
<a href="main.php?blok=fight&do=mir&rnd=255564">Обновить</a>
<a href="main.php?blok=statistika&do=1&doo=6593904&rnd=255564">Лог боя</a>
<u><b>Другие цели:</b></u>
<a href="main.php?blok=bots&rnd=255564">Существа(1)</a>
<a href="main.php?blok=chat&rnd=255564">Чат</a>

<div style="text-align:center;background:#436EEE;">=© Created by <font color=#FF0000>Alek</font>, 2008=</div></body></html>
как из него вырезать то что будет между
Код:
<a href="main.php?blok=fight&do=boi&id=216&hm=1&rnd=255564">Нападает Вася ур.106 ж.2226/2226 м.0/0</a>
<i>
это типа "Нападает Вася ур.106 ж.2226/2226 м.0/0" и потом нажать на него?
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Код:
#include <IE.au3>
;~ Скрипт для клика по ссылке нападающего
_IELoadWait($oIE)
$Links=_IELinkGetCollection($oIE)

	For $Link in $Links
		If StringInStr($Link.innertext,"Нападает ") Then
			_IELinkClickByText($oIE,$Link.innertext)
			ExitLoop
		EndIf
	Next
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
DarWiM
И как этот код вырезает что то?

BETAJIb
Я же дал ссылку на тему где приведён пример шаблона получения подстроки между двумя значениями, что ещё нужно?
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
CreatoR
Он не правильно сформулировал вопрос. Ему нужно было вырезать, чтоб потом по ней кликнуть. Я всего лишь предложил вариант попроще...
А вообще, то, что он просил находится в $Link.innertext, так что по сути задача выполнена, другое дело каким путём


Добавлено:
Сообщение автоматически объединено:

BETAJIb
Код:
$HTML=_IEBodyReadHTML($oIE)
$x=StringRegExp($HTML,"(?i)Координата <b>(.*?)\D\d+</b>",1)
$y=StringRegExp($HTML,"(?i)Координата <b>\d+\D(.*?)</b>",1)
MsgBox(0,"","x="&$x[0])
MsgBox(0,"","y="&$y[0])

Это для получения координат
 
Автор
B

BETAJIb

Новичок
Сообщения
34
Репутация
0
есть такой кусок html кода:
Код:
<i>Ты получил 256 монет.</i>
<i><font color=#8B4513>Из монстра выпала вещь граната[1].</font></i>
<i>Килер убил противника немец.</i>
<i>
как из него вытягнуть:Из монстра выпала вещь граната[1]. ?
пробывал:
Код:
$KodHtml=_IEDocReadHTML ( $oIE )
$aResult = StringRegExp($KodHtml, '.*.</i>
<i><font color=#8B4513>(.*?).</i>
<i>.*', 3)
MsgBox(64, 'Info', $aResult)
,но почему то не работает...что не так?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
BETAJIb
У тебя трудности с чтением?

Это последнее предупреждение:

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"[RegExp] почему не работает?" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Администратор.











Добавлено:
Сообщение автоматически объединено:

BETAJIb
Последние 3 темы в данном разделе соединены воедино.


Добавлено:
Сообщение автоматически объединено:

BETAJIb [?]
почему то не работает...что не так?
Не читаешь справку, вот что не так.
StringRegExp с параметром 3 возвращает массив.

как из него вытягнуть:Из монстра выпала вещь гранат

Код:
$vTest = '<i>Ты получил 256 монет.</i>
<i><font color=#8B4513>Из монстра выпала вещь граната[1].</font></i>
<i>Килер убил противника немец.</i>
<i>'
$sRet = StringRegExpReplace($vTest, '.*.</i>
<i><font color=#8B4513>(.*?)</font></i>
<i>.*', '\1')
MsgBox(64, 'Title', $sRet)
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
BETAJIb
всякие символы типа / "мешают" функции работать. Старайся брать такой фрагмент для поиска, который одновременно уникален и наиболее прост
 
Автор
B

BETAJIb

Новичок
Сообщения
34
Репутация
0
а что за прикол??если задаю html код в переменную то все норм выбирает...е если через
Код:
$aHTML = _IEDocReadHTML($oIE)
то место того что бы выбрать что мне нужно,оно выкидает полность код всей html страницы ???
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
BETAJIb

_IEDocReadHTML считывает весь код сохранённой страницы
 
Автор
B

BETAJIb

Новичок
Сообщения
34
Репутация
0
ну да я это понял...
Код:
$aHTML = _IEDocReadHTML($oIE)
$sRet=StringRegExpReplace($aHTML, '.*.</i>
<i><font color=#8B4513>(.*?)</font></i>
<i>.*', '\1')
MsgBox(64, $sRet, $sRet)
оно же должно вырезать что мне нужно и вывести...а почему то выкидывает всю страницу...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
BETAJIb
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Администратор.





BETAJIb [?]
оно же должно вырезать что мне нужно и вывести...а почему то выкидывает всю страницу...
Потому что в полном коде страницы есть переводы строк, и шаблон .* это не учитывает.
Так скорее всего будет работать:

Код:
$aHTML = _IEDocReadHTML($oIE)
$sRet=StringRegExpReplace($aHTML, '[.\r\n]*</i>
<i><font color=#8B4513>(.*?)</font></i>
<i>[.\r\n]*', '\1')
MsgBox(64, $sRet, $sRet)
 
Автор
B

BETAJIb

Новичок
Сообщения
34
Репутация
0
всеравно почему то не работает((((
вот полный код страницы:
Код:
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"><html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><link rel="stylesheet" href="styles/main1.css" type="text/css"><title>Великоземье</title></head><body bgcolor=#FFFFF0 text=#000000 link=#0000FF vlink=#0000FF><div style="text-align:left;font-family: Times New Roman, sans-serif, Tahoma;"><i><font color=#006400>Ты получил Панцирь.</font></i>
<i>Ты получил 590 монет.</i>
<i><font color=#8B4513>Из монстра выпала вещь Шлем[110].</font></i>
<i>Килер убил противника Брон.</i>
<i>[2293]Килер ранил противника Броненосец - 2184(5299) ож.</i>
<a href="main.php?blok=nzwo&do=nord&rnd=162419">Сев</a> | <a href="main.php?blok=nzwo&do=zuid&rnd=162419">Югъ</a> | <a href="main.php?blok=nzwo&do=west&rnd=162419">Зап</a> | <a href="main.php?blok=nzwo&do=ost&rnd=162419">Вос</a> | <a href="main.php?blok=karta&rnd=162419">Карта</a> [<a href="main.php?blok=pkarta&rnd=162419">^</a>]
<a href="main.php?blok=hero&rnd=162419">Герой</a><b> Килер</b>
<font color="green">Уровень 120 Рейтинг 0</font>
<font color="red">9456/9456</font> [<a class="red" href="main.php?blok=vost&do=1&rnd=162419">+</a>] <font color="blue"> 127/127</font> [<a class="blue" href="main.php?blok=vost&do=2&rnd=162419">+</a>]
Лошадь <b>Демон</b> <font color=#228B22>43/48</font>
<div style="position:relative;width:120px;height:5px;border: 1px solid #444444;background-color:#CD5C5C;" title="96.94%"><div style="background-color:#228B22;width:96.9478592855%;position:absolute;height:5px;left:0px;"></div></div>Монеты: 15778680
Координата <b>151/143</b> <a href="main.php?blok=statistika&do=1&rnd=162419">история</a>
<a href="main.php?blok=opis&rnd=162419">Местность: степь</a>
<a href="main.php?blok=domiki&rnd=162419">Здания(1)</a>
<a href="main.php?blok=veschy&rnd=162419">Вещи под ногами(2)</a>

<a href="main.php?blok=chat&rnd=162419">Чат</a>
<a href="main.php?blok=pochta&rnd=162419">Почта</a>
<a href="main.php?blok=main&rnd=162419">Обновить</a>
<a href="main.php?blok=menu&rnd=162419">Меню</a>

<div style="text-align:center;background:#436EEE;">=© Created by <font color=#FF0000>Идрит</font>, 2008=</div></body></html>
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Да, потому что . в наборе распознаётся как точка, а не как любой символ.
Поэтому нужно искать по \s (любой символ пробела) и \S (любой символ который не является пробелом).

Код:
$sRet = StringRegExpReplace($aHTML, '[\s\S]*</i>
<i><font color=#8B4513>(.*?)</font></i>
<i>[\s\S]*', '\1')
MsgBox(64, $sRet, $sRet)


Ну или использовать (?s):

Код:
$sRet = StringRegExpReplace($aHTML, '(?s).*</i>
<i><font color=#8B4513>((?-s).*?)</font></i>
<i>.*', '\1')
MsgBox(64, $sRet, $sRet)
 
Автор
B

BETAJIb

Новичок
Сообщения
34
Репутация
0
и это всеравно не работает(((я уже пробывал так(((
 
Верх