Wyrażenia regularne preg_match_all

0

Mam taki kod:

<a href="def/plik-01-desc.html">X</a>, <a href="def/olaf-71-21-plik.html">Y</a>&nbsp;&nbsp;

Zmienne są części:
X
Y
oraz to, co jest pomiędzy def/ a .html

Potrzebuje wyciągnąć to: olaf-71-21-plik

Użyłem preg_match_all ale nie do konca działa
Na początku próbuję tylko wyciągnąć: olaf-71-21-plik.html">Y
a dopiero później tą nastepną część, ale już na tym etapnie cos mi nie działa :(

preg_match_all('/<a href="def\/(.[^<\/a>&nbsp;&nbsp;]*)<\/a>&nbsp;&nbsp;/', $strona, $link);

Mógłby ktoś zerknąć?

0

HTML nie jest językiem regularnym więc wyrażenia regularne nie są tu zbyt rozsądnym rozwiązaniem, chyba, że wiesz, że kod HTML się nie zmieni.

Do tego wyżej proponuję coś prostego (z założeń wybiera to tylko linki zaczynające się od def)
/href="(def[^"]+)">([^<]+)</

  • flaga PREG_SET_ORDER

Wynik:

array (
  0 => 
  array (
    0 => 'href="def/plik-01-desc.html">X<',
    1 => 'def/plik-01-desc.html',
    2 => 'X',
  ),
  1 => 
  array (
    0 => 'href="def/olaf-71-21-plik.html">Y<',
    1 => 'def/olaf-71-21-plik.html',
    2 => 'Y',
  ),
)
0

A nie możesz zaprzęgnąć do tego js zamiast bawić się w wyrażenia regularne?

var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
    console.log(links[i].getAttribute("href").slice(4, -5));
}
0

Jeśli pobierasz całą stronę po stronie serwera, to użyj tego: http://symfony.com/doc/current/components/dom_crawler.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1