Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wyrażenie regularne ..., ... do szpeców
id4
post 21.04.2008, 11:35:38
Post #1





Grupa: Zarejestrowani
Postów: 223
Pomógł: 1
Dołączył: --
Skąd: Rogożnik /K-ce/

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


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.

Ten post edytował id4 21.04.2008, 11:51:01
Go to the top of the page
+Quote Post
webdice
post 21.04.2008, 11:46:11
Post #2


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Proszę uzupełnić temat o brakujący tag, w przeciwnym wypadku temat zostanie zamknięty.
Go to the top of the page
+Quote Post
ayeo
post 21.04.2008, 11:57:40
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


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!


--------------------
Go to the top of the page
+Quote Post
id4
post 21.04.2008, 12:01:18
Post #4





Grupa: Zarejestrowani
Postów: 223
Pomógł: 1
Dołączył: --
Skąd: Rogożnik /K-ce/

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


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.
Go to the top of the page
+Quote Post
ayeo
post 21.04.2008, 12:02:51
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


patrz wyżej winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 21.04.2008, 12:07:46
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


  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

Ten post edytował dr_bonzo 21.04.2008, 12:09:14


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
id4
post 21.04.2008, 12:15:46
Post #7





Grupa: Zarejestrowani
Postów: 223
Pomógł: 1
Dołączył: --
Skąd: Rogożnik /K-ce/

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


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].
Go to the top of the page
+Quote Post
dr_bonzo
post 21.04.2008, 12:33:18
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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 <, >, | )


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 5.07.2025 - 14:38