masz trzy możliwości do zapisania linków w hrefach:
Kod
1. <a href="link.html">sadsad</a> <a href="link.html" class="asd">sadsad</a>
2. <a href='link.html'>sadsad</a> <a href='link.html' class='sad'>sadsad</a>
3. <a href=link.html>asdsafd</a> <a href=link.html class=csa>asdsafd</a>
Analizując to można dojść do wniosku, że jeśli link zaczął się cudzysłowem lub apostrofem, to zakończy się odpowiednio cudzysłowem lub apostrofem. Jeśli nie został użyty żaden z tych znaków, to link zakończy się przy pierwszym białym znaku lub pierwszym ">". Składając to do kupy otrzymujemy takie oto działające, ale kompletnie niezrozumiałe dla niedoświadczonych wyrażenie:
<?php
$link = 'as<a href="link_1.html">link1</a>sad dsa <a href="link_2.html" class="cos">link2</a>asdsd
asdsaf<a href='link_3.html'>link3</a>sad dsa <a href='link_4.html' class="cos">link4</a>asdsd
ds d<a href=link_5.html>link5</a>dsf gds dg <a href=link_6.html class="cos">link6</a>ds dsg ';
if( preg_match_all( '/<a[^>]+?hrefs*?=s*?("|')?
(.*?
)(?
(1
)1
[^
>]*>|(?
:s
[^
>]*>|>))(.*?
)</a
>/si
', $link, $sub ) ) { echo '<pre>' . htmlspecialchars( print_r( $sub, true ) ) . '</pre>';
}
?>
Ew. możesz sprawdzać, czy w już znalezionych danych jest dwukropek (
strpos" title="Zobacz w manualu PHP" target="_manual) - jeśli tak, to olewasz te dane i przechodzisz do następnych.
PS. To oczywiście nie jest gotowiec, tylko ogólny wzór pobierania linków z kodu HTML. Musisz go sobie jeszcze przerobić. Jednak zamiana
(.*?) na "wszystko tylko nie dwukropek" będzie o wiele prostsza niż zamiana
([-a-z0-9_\?\\&\.=]*) na "wszystko tylko nie dwukropek" ;]