Что нового

[RegExp] Парсинг HTML, шаблон с исключением слова.

real_sm

Новичок
Сообщения
18
Репутация
1
Есть такой HTML:

Код:
<span ready="true" image="kjfsakdjfdknfkdf">Save</span>
<span ready="false" image="dajklfhlsdhfkfhdvdk">Ignore</span>
<span ready="false" image="dsafldshfo2rhhfdoiwehfwe">Cancel</span>

Значение "image" всегда рандомное, плюс могут быть еще вложенные теги:

Код:
<span ready="false" image="dsafldshfo2rhhfdoiwehfwe"><span image="lkdjflsdjflsd"><span image="dskfjslkdfjlksduf">Cancel</span></span></span>

Нужно найти значение ready для тега span с innertext "Cancel".

Такой код выводит значение ready для первого тега с innertext "Save"
Код:
$sPattern = '(?si)<span ready="(.*?)".*?Cancel</span>'

Как вывести именно для innertext "Cancel"? Предполагаю, что как-то надо исключить из поиска слово "ready", но как это сделать?
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$file=FileRead(@ScriptDir&'\123')
$str=StringRegExp($file,'(?si)<span ready=.*?</span>',3)
$res=''
For $i=0 To UBound($str)-1
	If StringInStr($str[$i],'Cancel') Then _
	$res&=StringRegExpReplace($str[$i],'.*<span ready="(.*?)".*','\1')&@CRLF
Next
MsgBox(0,'',$res)
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Вариант :
Код:
$sText = ClipGet()
$sPatern ='(?si).*<span ready="(.*?)".*?>\s*Cancel.*'
$sResult = StringRegExpReplace( $sText, $sPatern, '${1}' )
 
Автор
R

real_sm

Новичок
Сообщения
18
Репутация
1
sngr, gregaz, спасибо большое. Вы перевернули мое представление о регулярных выражениях. :smile:
 
Верх