Mam serię tabel jenda po drugiej jako daną wejściową. Każda z tabel zawiera kilka podstawowych informacji typu nazwa, adres www, opis, itp. Chcę wyciągnąć z pliku źródłowego wszystkie te informacje za pomocą wyrażenia regularnego i wrzucić do bazy danych.
Używam do tego celu funkcji:
Gdy zastosuję wzorzec do wyciągnięcia informacji z wierszów tabel zawierających link do www:
$pattern = '#'; $pattern .= 'WWW.*?<a.*?>(.*?)</a>'; $pattern .= '#';
Wzorzec działa poprawnie, tam gdzie pole www jest w tabeli uzupełnione to znajduje link a jak pole jest puste to nie przeszkadza to w wszukaniu następnych pól.
Wzorzec dla wszystkich pól jednej tabeli wygląda tak
$pattern = '#'; $pattern .= 'Nazwa.*?<p>([^<]*)</p>.*?'; $pattern .= 'WWW.*?<a.*?>(.*?)</a>.*?'; $pattern .= 'Opis.*?<p>([^<]*)</p>'; $pattern .= '#';
Wzorzec ten działa ale niestety pojawia się tutaj problem gdy napotka on tabelę która będzie miała pole WWW puste. Wówczas brak jest dopasowania do tabeli i jedyne co zwraca to wyniki do momentu napotaknia tabeli bez linku www.
Próbowałem zmienić ten wzorzec ujmując całą kotwicę zawierającą link w warunek 0 lub więcej []* ale niestety zmiana wzorca na:
$pattern = '#'; $pattern .= 'Nazwa.*?<p>([^<]*)</p>.*?'; $pattern .= 'WWW.*?[<a.*?>(.*?)</a>]*.*?'; $pattern .= 'Opis.*?<p>([^<]*)</p>'; $pattern .= '#';
nic nie zmienia.
W związku z tym chciałbym się zapytać
1.Czy można zagnieżdżać *?
2.Jak można rozwiązać powyższy problem