Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][RegExp] Problem :]
Forum PHP.pl > Forum > PHP
Spirit86
Witam.
Piszę właśnie funkcję, która ma ukrywać kod. Problem wygląda tak:
Kod
(RE)
użytkownik JAKIŚNICK ( 2004-10-03 19:23:54 ) napisał:
jakiś tekst aasgasdf
(/RE)

chcę zamienić to na takie coś:
  1. <b>użytkownik JAKIŚNICK ( 2004-10-03 19:23:54 ) napisał:</b><br /><div id=ID>jakiś tekst aasgasdf</div>

gdzie ID to data (2004-10-03 19:23:54) pozbawiona ( '-',' ',':' ) - czyli: 20041003192354
napisałem
  1. <?php
  2. function hideRE($text)
  3. {
  4.   global $lang;
  5.   $RegExpr = str_replace(array('{username}', '{date}'), array('(A-Za-z0-9)', '(0-9-:)'), $lang['RE_Line']); //wyrażenie regularne oddzielające nick i datę
  6.   $text = preg_replace("#(RE)(.*?)(/RE)#si","<div style="font-color: silver;">1</div>", $text);
  7.  
  8.   return $text;        
  9. }
  10. ?>

tylko utkwiłem w martwym punkcie ;(
s_w_ir
  1. <?php
  2. function hideRE($text)
  3. {
  4. global $lang;
  5. $RegExpr = str_replace(array('{username}', '{date}'), array('(A-Za-z0-9)', '(0-9-:)'), $lang['RE_Line']); //wyrażenie regularne oddzielające nick i datę
  6. $text = preg_replace("#(RE)(.*?)(napisał:)(.*?)(/RE)#si","<b>12</b><div style="font-color: silver;">3</div>", $text);
  7.  
  8. return $text;
  9. }
  10. $a = "(RE)
  11. użytkownik JAKIŚNICK ( 2004-10-03 19:23:54 ) napisał:
  12. jakiś tekst aasgasdf
  13. (/RE)";
  14.  
  15. echo hideRE($a);
  16. ?>

Nie wiem czy to to o co Ci chodzi, ale jeśli nie to wklej jeszcze raz to co chcesz uzyskać, bo tamten post jest jakis zepsuty. Pozdro.
Spirit86
no teraz jest prawie dobrze, ale znalazłem następujące bugi:

1) Gdy jest (RE) "zagnieżdżone" (czyli (RE) assdf (RE)adsasd(/RE)(/RE) tekst się niszczy.
2) Nie ma w divie tego ważnego, jak dla mnie, ID smile.gif

Edytowałem mój powyższy post.
Pozdrawiam
s_w_ir
  1. <?php
  2. function hideRE($text)
  3. {
  4.   
  5.   $text = preg_replace("#(RE)(.*?)(d+)-(d+)-(d+) (d+):(d+):(d+)( ) napisał:)(.*?)(/RE)#si","<b>12-3-4 5:6:78</b><br /><div id=234567>9</div>", $text);
  6.  
  7.   return $text;
  8. }
  9. ?>
To działa na bank (u mnie było OK) dla zwykłych wpisów(Pasuje to dokładnie pod schemat który pokazałeś w pierwszym poście). Jakkolwiek bardzo mi sie nie podoba to co stworzyłem(wygląda bardzo nieoptymalnie), dziś dopiero zrozumiałem jak działa preg_replace(), dlatego też odpisałem na Twój post. Jutro zgłębie bardziej wiedze na temat bardziej zaawansowanego użycia tej funkcji.
Co do zagnieżdżonych to jeszcze nie wiem, miałem koncepcje, ale dawało to nieoczekiwane efekty sad.gif
Pozdrawiam.

edit***
Wywaliłem początek Twojej funkcji bo uznałem ten fragment za nieprzydatny kiedy będzie potrzeba robić zagnieżdżenie.
Spirit86
@s_w_ir: To drugie rozwiązanie nie jest dobre, bo sprawa wygląda tak:

wszystko zależy od języka jaki się wybierze.
tzn. jest zmienna $lang = array(); //standart.

Teraz, tak,


  1. <?php
  2. $lang['RE_Line'] = '(RE)użytkownik {username} ( {date} ) napisał:'; 
  3. ?>


i po przejściach wygląda tak: ):
Kod
(RE)
użytkownik JAKIŚNICK ( 2004-10-03 19:23:54 ) napisał:
jakiś tekst aasgasdf
(/RE)


1) porównujemy (RE) (.?*) (/RE) ze zmienną $lang['REline'], wyciągamy ten string z tekstu, liczymy ID.
2) Rozdzielamy (RE) JAKIŚ TEKST (/RE) (Zamiast tego wstawimy:
  1. <b>użytkownik JAKIŚNICK ( 2004-10-03 19:23:54 ) napisał:</b><br /><div id=ID>jakiś tekst aasgasdf</div>

chcę uzyskać efekt:

[wiersz]Użytkownik NazwaUsera ( 2004-10-03 19:23:54 ) napisał:[/wiersz]
[wiersz schowany] TREŚĆ [/wiersz]

W JS napisałem funkcję:
  1. <script type="text/javascript">
  2. <!--
  3. function menu(id_one)
  4. {
  5. if(document.getElementById(id_one).style.display == 'inline')
  6. document.getElementById(id_one).style.display = 'none';
  7. else
  8. document.getElementById(id_one).style.display = 'inline';
  9. }
  10. -->
  11. </script>

Stosuje się ją odwołując się do UNIKALNEGO ID, no i w tym problem.

Zastanawiałem się, czy nie da się prościej (bez tego ID), ale nie przychodzi mi nic do głowy, może użyć this.?
Pozdrawiam
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.