регулярное выражение php для сопоставления тегов привязки

#php

#php

Вопрос:

перейдите к исходному тексту этой страницы: www.songs.pk/indian/7days.html

будет только восемь ссылок, которые начинаются с http://link1

например : <a href="http://link1.songs.pk/song1.php?songid=2792">Tune Mera Naam Liya</a>

мне нужно регулярное выражение php, которое соответствует

http://link1.songs.pk/song1.php?songid=2792

и

Tune Mera Naam Liya

Спасибо.

Комментарии:

1. Вы хотите сопоставить a элементы, на href которые начинается их http://link1 атрибут, с,?

Ответ №1:

Вам лучше использовать что-то вроде simplehtmldom для поиска всех ссылок, затем найдите все ссылки с соответствующим HTML / href.

Синтаксический анализ HTML с помощью регулярных выражений не всегда является лучшим решением, и в вашем случае, я чувствую, это принесет вам только боль.

 $href = 'some_href';
$inner_text = 'some text';

$desired_anchors = array();

$html = file_get_html ('your_file_or_url');

// Find all anchors, returns a array of element objects
foreach($html->find('a') as $anchor) {
    if ($a->href = $href amp;amp; $anchor->innertext == $inner_text) {
        $desired_anchors[] = $anchor;
    }
}

print_r($desired_anchors);
  

Это должно помочь вам начать.

Ответ №2:

Не используй регулярное выражение приятель! У PHP есть более подходящий инструмент для этого…

 $dom = new DOMDocument;

$dom->loadHTML($str);

$matchedAnchors = array();

$anchors = $dom->getElementsByTagName('a');

$match = 'http://link1';

foreach($anchors as $anchor) {

   if ($anchor->hasAttribute('href') AND substr($anchor->getAttribute('href'), 0, strlen($match)) == $match) {
      $matchedAnchors[] = $anchor;
   }

}
  

Ответ №3:

держи, ты идешь

 preg_match_all('~<a .*href="(http://link1..*)".*>(.*)</a>~Ui',$str,$match,PREG_SET_ORDER);
print_r($match);