Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Regular Expression - zagnieżdżanie []*
jimmix
post 8.01.2012, 15:04:44
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 26.04.2009

Ostrzeżenie: (0%)
-----


Witam,

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:
  1. preg_match_all($pattern, $subject, $result, PREG_SET_ORDER);

Gdy zastosuję wzorzec do wyciągnięcia informacji z wierszów tabel zawierających link do www:

  1. $pattern = '#';
  2. $pattern .= 'WWW.*?<a.*?>(.*?)</a>';
  3. $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

  1. $pattern = '#';
  2. $pattern .= 'Nazwa.*?<p>([^<]*)</p>.*?';
  3. $pattern .= 'WWW.*?<a.*?>(.*?)</a>.*?';
  4. $pattern .= 'Opis.*?<p>([^<]*)</p>';
  5. $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:
  1. $pattern = '#';
  2. $pattern .= 'Nazwa.*?<p>([^<]*)</p>.*?';
  3. $pattern .= 'WWW.*?[<a.*?>(.*?)</a>]*.*?';
  4. $pattern .= 'Opis.*?<p>([^<]*)</p>';
  5. $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
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 14:53