Что нового

из метатэгов <a> </a> извлечь className и href

Бублик2010

Новичок
Сообщения
14
Репутация
0
Пытаюсь извлечь из группы тэгов <a></a> cсылки типа "http :/ /hgdvjhcjgc bla-bla hgvcff" из спойлера . В RegexBuddY извлекается а в RegExp не работает, подскажите, пожалуйста, :wacko:

<A class=l onmousedown="return rwt(this,'','','','2','AFQjCNECyyXjJTPELfEBMsPH3yOb97jMwg','','0CDEQFjAB')" href="http://www.autoitscript.com/site/autoit/downloads/" target=_blank><EM>AutoIt</EM> Downloads - AutoItScript</A>

<A class=l onmousedown="return rwt(this,'','','','9','AFQjCNFTBqu5rfbFjr3JhaRqVnnp1bAsYg','','0CGsQFjAI')" href="http://habrahabr.ru/tag/AutoIt/" target=_blank><EM>autoit</EM> / Метки / Хабрахабр</A>

Код:
#include <Array.au3>

$text="<A class=l onmousedown='return rwt(this,'','','','2','AFQjCNECyyXjJTPELfEBMsPH3yOb97jMwg','','0CDEQFjAB')' href='http://www.autoitscript.com/site/autoit/downloads/' target=_blank><EM>AutoIt</EM> Downloads - AutoItScript[/url]<A class=l onmousedown='return rwt(this,'','','','9','AFQjCNFTBqu5rfbFjr3JhaRqVnnp1bAsYg','','0CGsQFjAI')' href='http://habrahabr.ru/tag/AutoIt/' target=_blank><EM>autoit</EM> / Метки / Хабрахаб?"

$link = StringRegExp($text,'<A\s*.+onmousedown(.+?)<\/A>',3)
$link_href = StringRegExp($link,'(?i)href="([^"]*?[^"]*)"',3)

    If IsArray($link_href)=1 Then
           _ArrayDisplay($link_href)
    EndIf
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
#include <Array.au3>

$text="<A class=l onmousedown='return rwt(this,'','','','2','AFQjCNECyyXjJTPELfEBMsPH3yOb97jMwg','','0CDEQFjAB')' href='http://www.autoitscript.com/site/autoit/downloads/' target=_blank><EM>AutoIt</EM> Downloads - AutoItScript[/url]<A class=l onmousedown='return rwt(this,'','','','9','AFQjCNFTBqu5rfbFjr3JhaRqVnnp1bAsYg','','0CGsQFjAI')' href='http://habrahabr.ru/tag/AutoIt/' target=_blank><EM>autoit</EM> / Метки / Хабрахаб?"

$link_href = StringRegExp($text, "(?i)<a.*?href='([a-zA-Z0-9_:\/\.]+)",3)
If IsArray($link_href)=1 Then
	   _ArrayDisplay($link_href)
EndIf
 
Автор
Б

Бублик2010

Новичок
Сообщения
14
Репутация
0
А как можно уместить в строку паттерна (?i)<a.*?href="([a-zA-Z0-9_:\/\.]+) определение условия наличия onmousedown ? Неужели (?i)<a.*?href="([a-zA-Z0-9_:\/\.]+(onmouse+)) ? :laugh:

Единственное, что добавил - описание параметров, ссылки стали более читабельные (?i)<a.*?href="([a-zA-Z0-9_:\/\.\?\-]+) :-\ Только выделить по сlassName - ну никак :mad:


iv class="vspi"></div><span class="tl"><h3 class="r"><a href="http://autoit-script.ru/tag/AutoIt/" target="_blank" class="l" onmousedown="return
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Бублик2010 [?]
А как можно уместить в строку паттерна (?i)<a.*?href="([a-zA-Z0-9_:\/\.]+) определение условия наличия onmousedown ?

Код:
$sPattern = '(?i)<a.*?href="(.+?)\/".*?onmousedown.*?'
$sRezult = StringRegExp ( $sText ,$sPattern,3 )



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

Может лучше так:
Код:
$sPattern = '(?i)<a.*?href="(http:.+?)\/".*?class=.*?onmousedown'
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Бублик2010
Вам нужно получит все ссылки, или попадающие под определённый критерий?

gregaz [?]
Может лучше так:
Код:
$sPattern = '(?i)<a.*?href="(http:.+?)\/".*?class=.*?onmousedown'

IMHO в паттерне нужно поставить одинарные кавычки, иначе ничего не находит.
Код:
$sPattern = "(?i)<a.*?href='(http:.+?)\/'.*?class=.*?onmousedown"


gregaz, у меня ваш паттерн выводит одну ссылку.

Думаю тогда лучше так:
Код:
$sPattern = "(?i)<a.*?class=.*?onmousedown.*?href='(http:\/\/[\w\.\/]+)"
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Garrett [?]
IMHO в паттерне нужно поставить одинарные кавычки, иначе ничего не находит.
Все шаблоны приведены для приведенного автором текста :
Бублик2010 [?]
Только выделить по сlassName - ну никак
angry.gif

iv class="vspi"></div><span class="tl"><h3 class="r"><a href="http://autoit-script.ru/tag/AutoIt/" target="_blank" class="l" onmousedown="return
Здесь кавычки соответствуют.

Garrett
Думаю тогда лучше так:
Код: AutoIt [Выделить]
$sPattern = "(?i)<a.*?class=.*?onmousedown.*?href='(http:\/\/[\w\.\/]+)"
Вероятность "http:" без "//" ?
Можно, а можно применить конструкцию : [^"]+ (по мне достаточная однозначность выбора)
Код:
$sPattern ='(?i)<a.*?href="(http:[^"]+)\/".*?class=.*?onmousedown'
 
Автор
Б

Бублик2010

Новичок
Сообщения
14
Репутация
0
Думаю тогда лучше так:
Код: AutoIt [Выделить]
$sPattern = "(?i)<a.*?class=.*?onmousedown.*?href='(http:\/\/[\w\.\/]+)"

Именно эта конструкция определила успешное выражение !!! :beer:
Ее немного исправил, чтобы она она InnerHtml из Google ловила, и у меня получилось относительно функциональное
Код:
(?i)<a.*?class=.*?onmousedown.*?href="(http:\/\/[\w\.\/-]+)


Вероятность "http:" без "//" ?
Можно, а можно применить конструкцию : [^"]+ (по мне достаточная однозначность выбора)
Код:
$sPattern ='(?i)<a.*?href="(http:[^"]+)\/".*?class=.*?onmousedown'


Gregaz, да , Ваша (?i)<a.*?class=.*?onmousedown.*?href="(http:[^"]+)\/".*? отлично работает по условию вероятной задачи . Но хочется большего :scratch:

Стабильно выбирается по запросу Autoit из спойлера..

1:http://www.autoitscript.com/site/autoit/
2:http://webcache.googleusercontent.com/search
3:http://www.autoitscript.com/site/autoit/downloads/
4:http://webcache.googleusercontent.com/search
5:http://www.autoitscript.com/
6:http://webcache.googleusercontent.com/search
7:http://autoit-script.ru/
8:http://ru.wikipedia.org/wiki/AutoIt
9:http://www.oszone.net/3663
10:http://forum.ru-board.com/topic.cgi
11:http://webcache.googleusercontent.com/search
12:http://forum.ru-board.com/topic.cgi
13:http://creator-lab.ucoz.ru/load/3
14:http://habrahabr.ru/tag/AutoIt/
15:http://www.izcity.com/lib/18082006/autoit-3-2.htm

Покопаю еще чтобы ссылки типа http : //forum.ru-board.com/topic.cgi?forum=5&amp;topic=17705 входили в условие без ограничений. :blink:




[/quote]
 
Верх