Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybieranie tekst ze środka tagów
Forum PHP.pl > Forum > PHP
Thuunder
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... ?
MatheW
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.
Vogel
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.
Thuunder
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 ?
bim2
troszke nie rozumiem, mi to działa. Wysmienicie ;P. jak w którym momencie. Opisz dokładniej o co chodzi smile.gif
Vogel
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 ;]
Thuunder
dzięki 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ę smile.gif ?
tiraeth
Po to się stosuje operator i po zakończeniu wyrażenia (#si).
Thuunder
acha fajnie smile.gif

ale jeśli mam np. funkcję substr_count() i szukam, zliczam jakieś wyrażenie w tekście to w podobny sposób ?
Vogel
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().
Thuunder
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 ...
Vogel
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."
Thuunder
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
Vogel
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.
bendi
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.
Thuunder
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ę... 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 dry.gif
bim2
blink.gif blink.gif blink.gif
$preg = preg_match_all...
$ile= (int) $preg;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.