Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

  • Закрытая тема Тема закрыта

Preg_match_all() - получить href и анкор всех ссылок

#1 Вячеслав

Вячеслав
  • Пользователь
  • 357 сообщений
  • Репутация: 0
0

Отправлено 06 Ноябрь 2010 - 18:46

Всем привет!
Помогите спарсить ссылку из такого html :

<h3 dir="ltr">
		<a rel="nofollow" title="gdgdfg.wmv" href="/watch?v=N4p8SgnPkGE" id="video-long-title-N4p8SgnPkGE">
		  <b>gdgdfg</b>.wmv
		</a>
	  </h3>

Пробую так:

$s = '<h3 dir="ltr"><a rel="nofollow" title="gdgdfg.wmv" href="/watch?v=N4p8SgnPkGE" id="video-long-title-N4p8SgnPkGE"><b>gdgdfg</b>.wmv</a></h3>';

if(preg_match_all('#<a[.]*?\shref\s*=\s*["\']?([^\s>]+?)["\']?[.]*?>(.*?)</a>#i', $s, $match)){
$a = $match;
}


Нужно получить только те ссылки которые в h3.

Не находит!

 

 

  • 0

#2 D.T.S

D.T.S
  • Пользователь
  • 3 сообщений
  • Репутация: 0

Отправлено 06 Ноябрь 2010 - 20:50

Ну а так премитивно непробывал ?preg_match_all('|<h3>(.*?)</h3>|i', $a, $:);Или нужно то что после "href=" ?
  • 0

#3 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 07 Ноябрь 2010 - 01:51

Вячеслав, тебе что нужно получить? Как я понял по регулярке, то текст ссылки...
  • 0

#4 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 08 Ноябрь 2010 - 01:18

Анкор и урл
  • 0

#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 08 Ноябрь 2010 - 14:39

Вячеслав,
<?php

$str = "<a href='asdasd1.php'>asdasd1</a><h3 class=\"asd\">
<b><a href=\"http://www.site.ru/\">Сайт '\":=</a></b></h3><a href='asdasd2.php' class='asd'>asdasd2</a><h3><a href='#asd' class='asd2'>Якорь asd</a></h3>";
$matchs = array();
preg_match_all("#<h3.*>.*<a.*href=[\"'](.*)[\"'].*>(.*)</a>.*</h3>#isU", $str, $matchs, PREG_SET_ORDER);
print_r($matchs);

?>

Тяжелый конечно код, но для разового получения подойдет, проверил - работает.
Кстати, почитай про флаги U и s

3 - Модификаторы.
Указываются они либо в скобках, например так: (?Ui), либо после закрывающего символа '/pattern/Ui'.
i - регистронезависимость.
U - инвертирует жадность.
m - многострочный поиск.
s - если используется, то символ . соответствует и переводу строки. Иначе она ему не соответствует.
x - заставляет игнорировать все неэкранированные пробельные символы, если они не перечислены в символьном классе. Удобно, когда энтерами и пробелами вы хотите навести удобночитаемость в регулярке.


  • 0

#6 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 08 Ноябрь 2010 - 18:50

Спасибо огромное!!!
  • 0

#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 08 Ноябрь 2010 - 20:16

Вячеслав, всегда рад помочь :) Тему закрываю?
  • 0

#8 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 10 Ноябрь 2010 - 22:39

Да можно закрывать, но регулярка тема интересная будут еще вопросы :)
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru