Регулярное выражение.

Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
713

От природы не сильна в регулярных выражениях :)

Помогите пожалуйста получить со странички ссылки и тексты к ним

<a...href="qwe.html">text</a>

надо вычленить qwe.html и text

!kt0
На сайте с 28.06.2006
Offline
46
#1

/href="[\w]*">[\w]*</a>/xis (возможно перед ковычками \)

$p=explode('"',$result); - в $p[1] -url

$p=explode('>',$result);

$x=explode('<',$p[1]); - $x[0] - текст ссылки

http://doorway-blog.blogspot.com/2006/08/pars-function.html - функция с регуляркой выдирает ссылки из гугли

http://seorepa.com/ (http://seorepa.com/) - блог был там, пока не запилили mchost
Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
#2

Через explode очень медленно получится - объёмы большие...

Хочется через регулярные выражения сделать...

Нашла пример для "выдирания" адресов из выдачи Яндекса, но толку от этого... честно говоря ни сколько

<?php

$yaurl = 'http://www.yandex.ru/yandsearch?text=слово&stype=www';

$contents = file_get_contents($yaurl);

$pattern = "|<li value[^<]+<[^<]+<A[\s]+href=\"([^\"]*)[^>]*|is";

preg_match_all($pattern, $contents, $out, PREG_PATTERN_ORDER);

for($i = 0; $i < count($out[1]); $i ++) {

echo $out[1][$i]."<br>";

}

?>

!kt0
На сайте с 28.06.2006
Offline
46
#3

$out=array();

preg_match_all('/href="[\w]*">[\w]*</a>/xis', $contents, $out);

Вернет $out

Я имел ввиду, что уже out рубить через explode. Через регулярки не факт, что быстрее.

Можно вот так сделать:

$out=array();

$out1=array();

preg_match_all('/(?<=href=")[\w]*(?=">)/xis', $contents, $out);

preg_match_all('/(?<=">)[\w]*(?=</a>)/xis', $contents, $out1);

По идее в $out должны оказаться ссылки, а в $out1 - тексты ссылок, но на счет $out1 - не очень уверен

aspnet
На сайте с 17.09.2005
Offline
68
#4
Sveta Prokopeva:
От природы не сильна в регулярных выражениях

😂😂😂😂😂😂😂

Умение применять другие силы - это класс :)

!kt0
На сайте с 28.06.2006
Offline
46
#5

Вот так вот первоначальный вариант выглядит. Особых тормозов не замечал.

$out=array();

preg_match_all('/href="[\w]*">[\w]*</a>/xis', $contents, $out);

foreach($out[какой-то там] as $v){

$p=array();

$p=explode('"',$result);

array_push($urlres,$p[1]);

unset($p);

$p=array();

$x=array();

$p=explode('>',$result);

$x=explode('<',$p[1]);

array_push($textres,$x[0]);}

СКОРПИОН
На сайте с 05.01.2006
Offline
120
#6

Кончайте извращаться...

Вот это парсер:

preg_match_all("!<a.*?href=\"?'?([^ \"'>]+)\"?'?.*?>(.*?)</a>!is", $str, $ok);

Вот это вывод:

for ($i=0; $i<count($ok[1]); $i++) {

echo "<br />".$ok[1][$i]." - ".$ok[2][$i];

З.Ы.

Парсим, естественно, то что находится в переменной $str

• Контекстные ссылки с внутренних страниц навсегда (/ru/forum/370882) • Качественные сайты для заработка на контекстной рекламе и ссылках
Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
#7

За помощь спасибо всем

Скорпиону отдельное за хороший рабочий вариант ;)

Вопрос исчерпал себя

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий