![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 1 Dołączył: 15.03.2004 Ostrzeżenie: (10%) ![]() ![]() |
Witam, mam taki problem, wyciagam sobie pewne dane za pomoca preg_match_all, kod wyglada nastepujaco:
i moj problem wyglada nastepujaco, jezeli w tych danych znajduja sie jakies znaczniki html to mi to nie dziala, przynajmniej tak mysle, ze to przez to, bo gdy jest czysty tekst to pobiera ladnie, a jak pojawia sie tylko w zrodle <br> lub jakis inny znacznik html to lipa... ma ktos pomysl jak to rozwiazac ? Z gory dziekuje za podpowiedzi! |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 575 Pomógł: 299 Dołączył: 26.03.2009 Ostrzeżenie: (20%) ![]() ![]() |
Czytałeś jakiś kurs?
([^<]+) - Wszystkie znaki oprócz znaku < -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
...oprócz lub do znaku jesli wyrażenie regularne jest dłuższe - jeśli coś jest do dopasowania dalej to raczej zalecałbym jeśli nie wiesz jakim znakiem ograniczyć coś "leniwego" - nie pamiętam jak to się nazywało ale:
(.+?) -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 1 Dołączył: 15.03.2004 Ostrzeżenie: (10%) ![]() ![]() |
Niestety dalej nie moge rozwiazac swego problemu. Moze podam przykladowy wzorzec z ktorego chce cos wyciagnac
i chce pobrac wszystko pomiedzy <li><p style="text-align: justify;"> a </p></li> probowalem tak
ale nie dziala mi to ![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 389 Pomógł: 141 Dołączył: 11.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Nie zadziała Ci bo co innego masz we wzorcu a co innego masz wpisane w preg_match_all.
Porównaj <p style="text-align: justify;"> a <p style=\"text-align:justify\"> (brak średnika, brak spacji). Dodatkowo musisz użyć modyfikatora Dotall (s), który sprawi że . (kropka) będzie oznaczała wszystkie znaki, także znak nowej linii. Ten post edytował athei 31.07.2009, 18:28:57 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
patrz pierwsze gdzie masz jeszce spacje i drugie gdzie jej nie ma - a i w pierwszym jest jeszcze ";":
text-align: justify; != text-align:justify skożystaj np. z takiego wyrażenia - a inne zależy od sytuacji ;p (nie wiem też czy nie masz na pewno w kodzie spacji pomiędzy znacznikami html więc odniosę się dla samego znacznika <p...>...</p>): '/<p[^>]*>(.+?)<\/p>/is' jeśli masz pytanie co znaczą te is na końcu wyrażenia regularnego to: Pattern Modifiers (w końcu nie wiem czy w kodzie nie masz gdzieś enterów bądź większą literą np. P napisane ;p) co do sprawdzenia wyjścia i czy coś przechwyciło urzyj: echo '<pre>'; print_r($out); echo '</pre>'; edit - za długo otwarta karta jak czytałem inne tematy - ubiegli mnie ;p Ten post edytował zegarek84 31.07.2009, 18:40:18 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 1 Dołączył: 15.03.2004 Ostrzeżenie: (10%) ![]() ![]() |
Akurat z ta spacja to dziwna sprawa jest, bo w kodzie zrodlowym wystepuje po text-align, ale w wyrazeniu jak ja dam to wogole mi to niedziala, a jak ja usuna to chociaz cokolwiek mi pobiera... oto dowod :
sam juz glupieje, probowalem na rozne sposoby ale pobiera mi tylko "czyste" opisy, a jak tylko w ktoryms w kodzie jest jakis znacznik html to niechce mi go pobrac, wiem ze wina tkwi w tym [^<]+ ale piszac inne wzorce wogole mi nie dziala ... docelowo powinno mi pobrac wszystkie te opisy http://www.filmweb.pl/f699/Sara,1997/opisy no ale jak widac pobiera tylko 3 z 6 .. ![]() Ten post edytował alpin 31.07.2009, 19:11:29 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
a próbowałeś wogóle mojego wyrażenia?? - i napisałem co używać zamiast ([^<]+) - ps. nie chce mi się testować wyrażenia ale skoro używasz coś takiego s+ (co znaczy jedno lub więcej liter "s" to jak to chcesz dopasować?)
co do spacji - białych znaków to używa się "\s" \s - znak spacji, tabulacji lub nowego wiersza ...choć jeśli wyrażenie regularne było w pojedynczym apostrofie to można było używać spacji albo w PHP albo w js - nie pamiętam i nie chce mi się sprawdzać... poza tym do parsowania stron to ja osobiście polecam DOM - wczytywaną stronę poprzedź @ by nie wyświetliło Ci błędów.... [edit] - oki - popatrzałem w kod strony i wyrażenie jakiego szukasz aczkolwiek nie chce mi się sprawdzać ale na 99% jest to (i w kodzie źródłowym w tym miejscu co piszesz nie ma spacji ;p): '/<li><p\sstyle="text-align\:justify">(.+?)<\/p><\/li>/is' - jeśli jest to w pojedynczym apostrofie to podwójny w środku nie musisz poprzedzać backslashem - dwukropek chyba tutaj nie trzeba poprzedzać ale wg. niektórych kursów i w niektórych sytuacjach trzeba to i Tobie tu poprzedziłem co nie zaszkodzi... a i wyswietl sobie całą tablicę tak jak pisałem bo chyba wyświetlasz sobie całe dopasowania do wyrażenia regularnego a nie zmienną będącą wewnątrz dopasowania (czyli nie to co w nawiasie - ale nie jestem pewien i mi się nie chce sprawdzać ;p) Ten post edytował zegarek84 31.07.2009, 19:59:27 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 08:43 |