preg_match_all określanie wyrażenia regularnego

0

Witam,

nie bardzo mogę sobie poradzić z określeniem wyrażenia regularnego przy funkcji preg_match_all
mam kod HTML i w nim chcę wyszukać powtarzający się kod, mniej więcej taki:
<td>&nbsp;<img src="link" alt="opis" /></td><td>wartość1</td><td>wartość2</td><td><div class="sortrosnaco"><div class="wynik">wartość3</div></div></td>
i z tego kodu (oczywiście tyle razy ile on się pojawi w kodzie) chcę wyciągnąć wartość1 , wartość2 , wartość3
próbowałem robić coś takiego
/(<td>&nbsp;<img src="link" alt="opis" /></td><td>)....(</td><td>).*(</td><td><div class="sortrosnaco"><div class="wynik">).*(</div></div></td>)/
czyli próbowałem wrzucać w atomy konkretny ciąg znaków później określić wzór dla wartości pomiędzy poszczególnymi (stałymi ciągami) ale to nie działa.
wartość1 = może przyjąć 4 znaki (cyfry, litery i znak przecinka)
wartość2 = może przyjąć max 12 znaków (cyfry, litery i znak przecinka)
wartość3 = max 2 znaki tylko cyfry

proszę o podpowiedź gdzie robię błąd albo może w ogóle trzeba to inaczej zadeklarować.

0

Do tego musisz użyć biblioteki. Niestety ale funkcje preg_match nie nadają się do tego.
Polecam skorzystać z tego: http://simplehtmldom.sourceforge.net/manual.htm

Za pomocą kliku linijek możesz wyciągnąć z kodu HTML co tylko chcesz.

0

preg_match_all("@<td>&nbsp;<img[^>]+></td><td>([^<]+)</td><td>([^<]+)</td><td><div[^>]+><div[^>]+>([^<]+)</div></div></td>@")

to najprostsze co powinno wpasować się w kod, pisane z palca, niestestowane

zamiast ([^<]+) powinno dać się podstawić wg reguł opisanych przez Ciebie
([a-zA-Z0-9,]{4})
([a-zA-Z0-9,]{1,12})
([0-9]{1,2})

0

Dzięki za podpowiedzi będę testował :)

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