![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 19.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
Od kilku godzin walczę z wyrażeniami regularnymi i niestety nie mogę sobie poradzić. Muszę z innej strony (za zgodą twórcy) wyłuskać kilka danych (w tym przypadku zdjęć z opisami), kod wygląda (po skróceniu) mniej więcej tak: Liczba takich sekcji <div> jest zmienna, są one oddzielone dodatkowo kodem html, a całość znajduje się oczywiście między <body> a </body>. Przyznam szczerze, że mam problemy nawet z wyborem funkcji, której użyć. Próbowałem preg_match_all, preg_replace oraz preg_split, ale bez efektu. Samo wyrażenie regularne robię w sposób podobny do tego:
Próbuję to wstawiać do preg_match_all, ale nic sensownego mi nie wychodzi, mimo wielu naprawdę prób zmiany. Mogę liczyć na pomoc? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 7.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Kod $zdj=array(); $fragmenty=explode('<div class="photo">'); $c=count($fragmenty); $m=array(); for($x=1;$x<$c;$x++) { // dla wszystkich fragmentów z wyjątkiem zerowego wykonujesz: $znal=ereg( "<a [^>]*><img src="([^>]*)" /></a>[\r\n ]*<p class=\"description\">([^<]*)</p></div>",$fragmenty[$x],$m); ); if($znal) $zdj[]=array('fotka'=>$m[1],'opis'=>$m[2]); } tablica $zdj jest dwuwymiarową tablicą zawierającą fotki z opisami. PS. Twój program nie działał ponieważ .* to dowolne znaki, a wyrażenia regularne zawsze dopasowują najdłuższy pasujący ciąg, tak więc w wynikach lądowały Ci również tagi HTML. Przy rozbiórce HTML (chociaż sam wykonałem podobne zadanie z użyciem explode i działało o niebo szybciej) pamiętaj, aby w ereg stosować ograniczniki [^>] (wszystkie znaki bez znaku większości - wewnątrz tagu HTML) oraz [^<] (wszystkie znaki bez znaku mniejszości - pomiędzy tagami HTML). Niniejsze rozwiązanie nie jest odporne na zmianę kolejności atrybutów wewnątrz tagu. Rozwiązanie może zawierać drobne błędy widoczne na etapie parsowania/kompilacji - nie testowałem go z powodu braku czasu i motywacji (z uwagi, że nawet linka na tym nie zarabiam), ale powinno działać. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 749 Pomógł: 37 Dołączył: 3.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
I tutaj takie pytanie? Czy jak zastosujemy explode czy jest to lepsze rozwiązanie? Kodu na pewno będzie więcej... Efekt końcowy ten sam...
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 235 Pomógł: 17 Dołączył: 18.07.2007 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
explode ? w jaki sposób ? jakoś mało sensowne to rozwiązanie wg mnie
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 749 Pomógł: 37 Dołączył: 3.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
tniesz na kawałki i wyciągasz odpowiednie fragmenty..
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 19.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Rozwiązanie może zawierać drobne błędy widoczne na etapie parsowania/kompilacji - nie testowałem go z powodu braku czasu i motywacji (z uwagi, że nawet linka na tym nie zarabiam), ale powinno działać. Dzięki wielkie za kod i pomoc, zaraz zabieram się do analizy przeróbki. A co chcesz wyciągnąć z tego kodu określ to precyzyjniej. Adres pliku .jpg (w sumie obojętnie którego, różnią się jedynie literką "m") oraz opis zdjęcia. == Dopisane == Dzięki wszystkim za pomoc, udało mi się uzyskać pożądany efekt. Kluczem do sukcesu okazała się użycie tego [^"jakis znak"] - można z tym łatwo i szybko wyciągnąć potrzebne treści. Ten post edytował nilo 21.07.2007, 10:58:26 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 09:29 |