Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyrażenie regularne ...
Forum PHP.pl > Forum > Przedszkole
id4
Witam

Męczę się od jakiegoś czasu z pewnym zagadnieniem.
Dla znawców bedzie to chwila, bo problem wydaje się nieskomplikowany.
  1. <?php
  2. $string="<p class=\"klasa\">Autko klasa - nie ma co</p>";
  3. ?>


No i potrzebuję zamienić słowo "klasa" na <span>klasa</span>.
Niby nic, ale nie może zamienić mi nic w znaczniku.
Założenia są takie, ze ma szukać i zamieniać wyrazy w podanym stringu olewając kod HTML - a dokładniej to co zawarte pomiędzy < i >.

Z góry dziękuję za pomoc.
webdice
Proszę uzupełnić temat o brakujący tag, w przeciwnym wypadku temat zostanie zamknięty.
ayeo
Ale które słowo klasa? Bo występuje ono 2 razy... biggrin.gif

  1. <?php
  2. $text = "<p class=\"klasa\">Autko klasa - nie ma co</p>";
  3. $text = preg_replace('@sklasas@', '<span> klasa </span>', $text);
  4. ?>


Pozdrawiam!
id4
Każde słowo KLASA, które nie jest częścią znacznika - w moim przykładzie 2-gie słowo, ale jak bedzie ich kilkanaście w stringu to oczywiście wszystkie - byle by nie były zawarte wewnątrz znacznika HTML.
ayeo
patrz wyżej winksmiley.jpg
dr_bonzo
  1. <?php
  2. $text = "<p>asdsds</p><p class=\"klasa\">Autko klasa - nie ma co</p><div class=\"klasa\">nasza-klasa.pl sux ;p</div>";
  3. $text = preg_replace('@(>[^<]*?)klasa([^>]*?<)@', '1<span>klasa</span>2', $text);
  4. echo( htmlspecialchars( $text ) );
  5. ?>



- zamienia kazde wystapienie ciagu "klasa", nie sprawdza czy to jest slowo
- jak ma byc to slowo to toche pokombinuj: spacje, kropki, przecinki itd
id4
Bardzo dziękuje smile.gif
Wszystko pięknie działa smile.gif

Oto gotowa funkcja do podświetlania tekstu z wyszukanym słowem - oczywiście podświetla tylko słowa a nie litery:

  1. <?php
  2. // podswietlanie wyszukania
  3. function highlight($string){
  4.  if(isset($_SESSION[search])){
  5. for($x=0;$x<count($_SESSION[search]);$x++){
  6.  $string=@preg_replace('@(>[^<]*?)b'.$_SESSION[search][$x].'b([^>]*?<)@','1<span class='highlight'>'.$_SESSION[search][$x].'</span>2',$string);
  7. }
  8.  }
  9.  return $string;
  10. }
  11. ?>


Szukane wyrazy są w tablicy $_SESSION[search].
dr_bonzo
Hymm, wlasciwie prosciej wstawic ( join("|"), $_SESSION['search'] ) w regexpa
i potem poprawic \\2 -> \\3 i dodac \\2 w srodek

no i przydala by sie walidacja danych searchowych (zeby nie bylo <, >, | )
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.