Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Preg replace oraz limit
Forum PHP.pl > Forum > Przedszkole
gracz
witam, mam problem z limitem jeśli chodzi o preg replace.
otóż mam taki kod;

  1. $pattern = '#<div id="identyfikator" class="contentDescription">(.*?)</div>#';
  2. $rlimit = ($numBlocks - 1);
  3. $html = preg_replace($pattern, 'replace to', $html, $rlimit);


w kodzie html pojawia się kilka divów, które mają ten sam identyfikator (id="identyfikator") oraz tą samą klasę - tylko środek się różni tego diva
chodzi oto, żeby zastosowac limit - w tej chwili wszystko mi kasuje - jakby limit w ogóle nie działał.

obecnie:
w kodzie pojawiają się takie dwa divy
a zmienna $rlimit zwraca 1
b4rt3kk
Cytat(gracz @ 26.06.2013, 10:48:25 ) *
witam, mam problem z limitem jeśli chodzi o preg replace.
otóż mam taki kod;

  1. $pattern = '#<div id="identyfikator" class="contentDescription">(.*?)</div>#';
  2. $rlimit = ($numBlocks - 1);
  3. $html = preg_replace($pattern, 'replace to', $html, $rlimit);


w kodzie html pojawia się kilka divów, które mają ten sam identyfikator (id="identyfikator") oraz tą samą klasę - tylko środek się różni tego diva
chodzi oto, żeby zastosowac limit - w tej chwili wszystko mi kasuje - jakby limit w ogóle nie działał.

obecnie:
w kodzie pojawiają się takie dwa divy
a zmienna $rlimit zwraca 1


Co się stanie jak wpiszesz $rlimit na sztywno? Np. 1?

Inna kwestia. Wyobraź sobie, że Twój HTML wygląda tak:

  1. <div id="identyfikator" class="contentDescription">jakas tresc pierwszego diva</div>
  2. <div id="identyfikator" class="contentDescription">jakas tresc drugiego diva</div>


Więc ów pattern:

  1. $pattern = '#<div id="identyfikator" class="contentDescription">(.*?)</div>#';


Zwróci 3 wyniki (a nawet więcej, ale są tu nieistotne):

  1. jakas tresc pierwszego diva

  1. jakas tresc pierwszego diva</div><div id="identyfikator" class="contentDescription">jakas tresc drugiego diva

  1. jakas tresc drugiego diva


Poza tym, powinno występować tylko jeden raz dane id w całym dokumencie (a przynajmniej tak jest w założeniu).
Gość
nic, efekt będzie ten sam - ponieważ zmienna $rlimit zwraca właśnie int(1);
coś mi się wydaje, że tu wchodzi konflikt z kodem html lub błędną samą regułkę - jak tworze sobie plik np. test.php
i daje tam zapis:

  1. $s = 'Forum PHP, swiat PHP';
  2. var_dump(preg_replace('/PHP/', '', $s, 1)); // zwraca string: Forum , swiat PHP


powyższy przykład jest OK, ale dodam teraz kod html;
  1. var_dump(preg_replace('/<b>(.*)<\/b>/', '', $s, 1)); // zwraca string: Forum
Gość
czyli jak regułka ma wyglądać? głowie się, kombinuje, itd
- jeśli chodzi o unikalny identyfikator to wiem - mam po prostu funkcje, ktora generuje dany wynik i teraz chce zredukowac liczbę tych kodów przez preg_replace z limitem, ale coś nie działa
b4rt3kk
Reguła musi sprawdzać, czy pomiędzy <div> a </div> nie znajduje się wewnątrz jakiś inny <div> (myślę, że wystarczy wykluczyć we wzorcu samo <, jeśli nie masz już tam innych elementów HTML).
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.