Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wybieranie tekst ze środka tagów
Thuunder
post
Post #1





Grupa: Zarejestrowani
Postów: 234
Pomógł: 1
Dołączył: 29.10.2004

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


Witam!

Mam pytanie jak napisać funkcję, która wybierze mi z określonego tagu html wszystko co się znajduje między znacznikami np.div? Mam kod html. np.
  1. <div><a href="link">jakis tam link</a> itp. </div>

wybierze mi
  1. <a href="link">jakis tam link</a> itp.


Wyszukać można funkcją preg_match do znalezienia tagów ale nie wiem do końca jak to zastosować i jak wybrać tekst z pomiędzy tagów... ?

Ten post edytował Thuunder 2.07.2006, 19:58:54
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
MatheW
post
Post #2





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 29.05.2006
Skąd: Lublin

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


Ja bym najpierw znalazł ciąg '<div', zapisał jego pozycję i od niej znalazł pierwszy nawias ostry '>' (bo przecież w div może być style i nie będzie to '<div>`), również zapisujemy jego pozycje. Następnie od tego znaku poszukujesz '</div>' i zapisujesz pozycje. To co masz pomiędzy pozycja '>' a '</div>' to to czego szukasz.
Go to the top of the page
+Quote Post
Vogel
post
Post #3





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

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


Cytat(MatheW @ 2.07.2006, 21:10 ) *
Ja bym najpierw znalazł ciąg '<div', zapisał jego pozycję i od niej znalazł pierwszy nawias ostry '>' (bo przecież w div może być style i nie będzie to '<div>`), również zapisujemy jego pozycje. Następnie od tego znaku poszukujesz '</div>' i zapisujesz pozycje. To co masz pomiędzy pozycja '>' a '</div>' to to czego szukasz.

tak, fajnie. tylko po co na okolo skoro mamy wyrazenia regularne?

  1. <?php
  2. $out = preg_replace("#.*?<div.*?>(.*?)</div>(.*?)#si", "$1<br />", $input_text);


i w $out dosteniesz liste wszystkiego co bylo w elementach blokowych poodzielane <br />-ami. dalej juz sobie z tym poradzisz.
Go to the top of the page
+Quote Post
Thuunder
post
Post #4





Grupa: Zarejestrowani
Postów: 234
Pomógł: 1
Dołączył: 29.10.2004

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


początek działa, ale coś nie bardzo z domknięciem, bo wyświetla mi wszystko do końca ...

w którym momencie wrzucić do tabeli wynik(treść) poszczególnych tagów ?

Ten post edytował Thuunder 2.07.2006, 20:49:33
Go to the top of the page
+Quote Post
bim2
post
Post #5





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


troszke nie rozumiem, mi to działa. Wysmienicie ;P. jak w którym momencie. Opisz dokładniej o co chodzi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Vogel
post
Post #6





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

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


fakt ;] moje niedopatrzenie. koniec ciagu nie bedzie dopasowany.

  1. <?php
  2. preg_match_all("#.*?<div.*?>(.*?)</div>#si", $input_text, $out);
  3. print_r($out[1]);


to chyba bardziej ci sie przyda. wrzuca wyniki (zawartosc tagow) do tablicy $out[1]. potem foreach i robisz z tym co zechcesz ;]
Go to the top of the page
+Quote Post
Thuunder
post
Post #7





Grupa: Zarejestrowani
Postów: 234
Pomógł: 1
Dołączył: 29.10.2004

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


dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

ale mam jeszcze pytanie jak zrobić żeby jeśli na którejś ze stron będzie zamiast div to DIV żeby i jedno i drugie wziął pod uwagę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ?

Ten post edytował Thuunder 4.07.2006, 15:51:23
Go to the top of the page
+Quote Post
tiraeth
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Po to się stosuje operator i po zakończeniu wyrażenia (#si).
Go to the top of the page
+Quote Post
Thuunder
post
Post #9





Grupa: Zarejestrowani
Postów: 234
Pomógł: 1
Dołączył: 29.10.2004

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


acha fajnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

ale jeśli mam np. funkcję substr_count() i szukam, zliczam jakieś wyrażenie w tekście to w podobny sposób ?

Ten post edytował Thuunder 4.07.2006, 16:12:59
Go to the top of the page
+Quote Post
Vogel
post
Post #10





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

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


nie. substr_count() nie obsluguje wyrazen regularnych tylko zwykly, czysty tekst (jako ciag szukanych znakow) .

to co ci pokazalem to wyrazenia regularne. do zliczenia ilosci wystpien uzyj preg_match_all().
Go to the top of the page
+Quote Post
Thuunder
post
Post #11





Grupa: Zarejestrowani
Postów: 234
Pomógł: 1
Dołączył: 29.10.2004

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


ok ale jak już mam w tablicy te wszystkie znalezione tagi np. div to zawartość z nich wrzucam do tablicy
  1. <?php
  2. preg_match_all("#.*?<div.*?>(.*?)</div>#si", $input_text, $out);
  3. print_r($out[1]);

potem wykonuję pętlę foreach i zliczam substr_count()

dlatego mam problem z tym żeby skrypt "nie brał" pod uwagę wielkości liter tylko zliczył wszystkie wystąpienia.
nie wiem w jaki sposób miałbym to zrobić za pomocą funkcji preg_match_all bo w sumie ona chyba jest do zwracania wszystkiego co pasuje do wzoru a nie do zliczania ...

Ten post edytował Thuunder 4.07.2006, 16:41:23
Go to the top of the page
+Quote Post
Vogel
post
Post #12





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

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


1. jak juz napisal tiraeth wielkości liter nie jest brana pod uwage!
2. gdybys zajrzal do linkow ktore ci podalem odkrylbys ze preg_match_all() "returns the number of full pattern matches (which might be zero), or FALSE if an error occurred."
Go to the top of the page
+Quote Post
Thuunder
post
Post #13





Grupa: Zarejestrowani
Postów: 234
Pomógł: 1
Dołączył: 29.10.2004

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


Jak sformułować wyrażenie żeby zliczyć ilość wystąpień zaa pomocą preg_match_all? Rozumiem,że wrzucić do tablicy a potem sprawdzić jej wielkość ? Mam jeszcze problem z formułowaniem wyrażeń regularnych
Go to the top of the page
+Quote Post
Vogel
post
Post #14





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

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


blagam. wszyskto dajemy ci jak na tacy wiec PRZECZYTAJ z łaski swojej informacje o tym jak dziala preg_match_all() i co ZWRACA (zreszta odpowiedni cytat nawet ci wkleilem).

Wiecej tu nie zagladam.
Go to the top of the page
+Quote Post
bendi
post
Post #15





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


Cytat(Thuunder @ 5.07.2006, 11:41 ) *
Jak sformułować wyrażenie żeby zliczyć ilość wystąpień zaa pomocą preg_match_all? Rozumiem,że wrzucić do tablicy a potem sprawdzić jej wielkość ?

Oj, manual prawdę Ci powie:
Cytat("php Manual")
int preg_match_all ( string pattern, string subject, array &matches [, int flags [, int offset]] )
(...)
Returns the number of full pattern matches (which might be zero), or FALSE if an error occurred.
Go to the top of the page
+Quote Post
Thuunder
post
Post #16





Grupa: Zarejestrowani
Postów: 234
Pomógł: 1
Dołączył: 29.10.2004

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


dzięki zrobiłem to jednak funkcją substr_count()(co prawda nie jest to na tyle dobre rozwiązanie bo jest problem z rozróżnianiem liter ale można zmienić na małe słowo szukane i tekst )
bo niestety mimo, że czytałem preg_match_all nie daje mi takich wyników jakich się spodziewałem, może coś źle robię... (IMG:http://forum.php.pl/style_emoticons/default/mad.gif)

jeśli dobrze rozumiem ( z tego co widzę) to preg_match_all zwraca tablicę wyników a nie ilość.

Wiem w którym miejscu php.net znajduje się ta funkcja ale liczyłem na pomoc a nie na podawanie kawałków z php.net (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)

Ten post edytował Thuunder 5.07.2006, 15:05:12
Go to the top of the page
+Quote Post
bim2
post
Post #17





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


(IMG:http://forum.php.pl/style_emoticons/default/blink.gif) (IMG:http://forum.php.pl/style_emoticons/default/blink.gif) (IMG:http://forum.php.pl/style_emoticons/default/blink.gif)
$preg = preg_match_all...
$ile= (int) $preg;
Go to the top of the page
+Quote Post

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: 23.08.2025 - 17:08