Что нового

[Данные, строки] Правильное регулярное выражение

ahees

Новичок
Сообщения
7
Репутация
0
Доброго времени суток! Появилась небольшая проблемка с вырезанием необходимого кода страницы.
есть строка:
Код:
<img id="im" style="width: 160px; height: 80px;" src="/im2/index.php?94d8d7a3948ca3fb90c57ca3c646b129=5c81724b6e7680f7689ea3ac317f9b9b&amp;r=3d251a5326c1711c3edc799d24fb2f2f">
пытаюсь вытянуть
94d8d7a3948ca3fb90c57ca3c646b129=5c81724b6e7680f7689ea3ac317f9b9b&amp;r=3d251a5326c1711c3edc799d24fb2f2f
пробовал следующий способ:
Код:
$TEXT=_IEDocReadHTML($oIE)
 $P=StringInStr($TEXT,'im2/index.php?')
    If ($P > 104) Then
      MsgBox(0,"","Подстрока не найдена...")
      Exit
    EndIf
    $P=$P+15
    $S=StringMid($TEXT,$P,104+4)     
 
	ConsoleWrite($S)

так добавляеться лишний ;amp =(
Пробовал второй способ:
Код:
$sPattern = '/im2/index.php?'
$sResult = StringRegExpReplace($read, $sPattern, '')
;ConsoleWrite($sResult & @CRLF)
$sPattern2 = '">'
$sResult1 = StringRegExpReplace($sResult, $sPattern2, '')
ConsoleWrite($sResult1 & @CRLF)
но он работает только в тесте, где я беру 1 строчку, а если на всей странице - печаль :(
Буду рад помощи по составлению регулярного выражения
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ahees,
Попробуйте так.
Код:
$sHTML = FileRead(@ScriptDir & '\1.html')
$sSearch = StringRegExpReplace($sHTML, '(?s).*/im2/index.php\?(.+?)">.*', '$1')
;~ $sSearch = StringRegExpReplace($sHTML, '(?s).*id="im".*?/im2/index.php\?(.+?)">.*', '$1')
If @extended = 1 Then
	ConsoleWrite($sSearch & @LF)
Else
	ConsoleWrite('Error!!!' & @LF)
EndIf
Или так.
Код:
#include <IE.au3>

Local $sUrl = @ScriptDir & '\1.html', _;поменяйте на Ваш адрес
		$oImg, $sSrc, $sSearch
Do
	$oIE = _IECreate($sUrl)
	If @error Then ExitLoop
	$oImg = _IEGetObjById($oIE, 'im')
	If @error Then ExitLoop
	$sSrc = $oImg.src
	If Not $sSrc Then ExitLoop
	$sSearch = StringRegExpReplace($sSrc, '^.*\?', '')
	If @extended <> 1 Then $sSearch = ''
Until 1
If $sSearch Then
	ConsoleWrite($sSearch & @LF)
Else
	ConsoleWrite('Error!' & @LF)
EndIf
 
Автор
A

ahees

Новичок
Сообщения
7
Репутация
0
madmasles,
лайк или плюс не нашел, пометил как лучший ответ. Проверил первый вариант - работает как нужно спасиб. Тема решена
 
Верх