Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][PHP]wycinanie kawałków tekstu
segat
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 26.03.2009

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


Witam.
Z góry przepraszam jeśli już było, szukałem ale nie znalazłem.
Pytanie jest takie:
Jest jakiś tam tekst html, w tym tekście html jest np. 10 linków porozrzucanych po całej stronie. Przykładowo:

<a class="kasa_powtarzalna" http://www.example1.pl>tytuł strony</a>
Cogito ergo sum Cogito ergo sum Cogito ergo sum Cogito ergo sum Cogito ergo sum Cogito ergo sum Cogito ergo sum Znaki specjalne <html></html><i>" (*)(@# LKJ LHF(*U)(* ILKFHKLDHFIU H@!)_)#* OIH LCogito ergo sum Cogito ergo sum Cogito ergo sum Cogito ergo sum<jakieś adresy>lkjsdl;fkj sdlkfj</php>
[0800102102][wielki książe]

<a class="kasa_powtarzalna" http://www.example2.pl>tytuł strony2</a>
Sumo corgito ego Sumo corgito ego Sumo corgito ego LKJ LHF(*U)(* ILKFHKLDHFIU H@!)_)#* OIH LCogito ergo sum Cogito ergo sum Cogito ergo sum Cogito ergo sum<jakieś adresy>lkjsdl;fkj sdlkfj</php>
[090338890][mała książka]


Wiem że beznadziejny przykład ale najprościej tak to wytłumaczyć (IMG:style_emoticons/default/smile.gif)
Mianowicie - jak widać, powtarza się tylko tekst <a class="klasa_powtarzalna" http://
Później już nic się nie powtarza aż do kolejnego <a class itd. Pomiędzy tymi powtarzalnymi częściami, są różne znaki html(tak jak na przykładzie).

Teraz tak - chciałbym móc sobie zapisać(np. w tablicy, BD, obojętne) adres witryny, oraz to co pisze w nawiasach kwadratowych na samym dole w danym przedziale, do powtórzenia kolejnego "<a class=..."(w pierwszym przykładzie "0800102102" i "wielki książe"").

Na początku starałem się to zrobić funkcją
preg_match_all='/(<a class="klasa_powtarzalna">)+(http:\/\/)+(([a-zA-Z0-9])*\.){2,5}\.?\/?[a-zA-Z0-9]*<\/a>+/si' -> no ale to mi wyświetla tylko adres http. Kombinowałem z pętlami, a później z kolejnym preg_match ale nic z tego

Wymyśliłem żeby powycinać kawałki tekstu, czyli np. od <a class="klasa_powtarzalna do <a class="klasa_powtarzalna" (było by tego np. 10 kawałków tekstu) i dopiero te kawałki tekstu poddać "czesaniu" przez preg'a.

Prosiłbym o jakieś porady, nakierowanie jak to zrobić, cokolwiek. Czy jest możliwość w ogóle wycinania kawałków tekstu, jeśli jakaś część jest niezmienna i powtarza się np. 10 razy ? Chodzi mi o wycięcie od początku danego kawałka tekstu który się powtórzy, do jego powtórzenia i tak w kółko, aż sobie wszystko podziele na części(zapiszę do tablicy te 10 kawałków tekstu po ileś tam znaków).

Pozdrawiam.
Darek
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
melkorm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Sam nie jestem zn ich dobry, ale to co napisałem mogę Tobie jeszcze opisać, jeżeli ktoś potrafi napisać lepsze to bardzo proszę bo naprawdę nie wiem czy to w ogóle ma coś wspólnego z wyrażeniami regularnymi .... (IMG:style_emoticons/default/sad.gif)
  1. preg_match_all('/<a class="kasa_powtarzalna" href="(.*)">.*\s.*\s\[([0-9]+)\]\[(.*)\]/',$t,$matches);


1. Każdy pattern musi być w // .
2. Nawiasy dają nam to że zostanie to uwzględnione w wynikach.
3. href="(.*)" -> czyli tutaj adres url (IMG:style_emoticons/default/winksmiley.jpg)
4. .*\s.*\s\[([0-9]+)\]\[(.*)\] - (to dla mnie jest brzydkie, ale działa (IMG:style_emoticons/default/tongue.gif) )
.* = cokolwiek i ilekolwiek, \s - łamanie linii i znów cokolwiek i ilekolwiek (jesteśmy w linii z "[090338890][mała książka]") \[ zaznaczenie że to nie część pattern'u tyko zwykły znak.
([0-9]+) (uwzględnienie w wynikach) - znaki od 0-9 w ilości jeden lub więcej. i znów zwykły znak \] po nim \[, znów uwzględnienie wszystkiego co znajdzie się w nawiasach kwadratowych czyli (.*) i zamknięcie nawiasu kwadratowego \].
Go to the top of the page
+Quote Post
Pawel_W
post
Post #3





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


Cytat(melkorm @ 2.01.2010, 21:54:21 ) *
1. Każdy pattern musi być w // .

wcale nie (IMG:style_emoticons/default/winksmiley.jpg) // to flagi i można je zmieniać, równie dobrze pattern może być w ## (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 7.10.2025 - 11:19