Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_replace ?
Forum PHP.pl > Forum > PHP
truvati
Witam
mam oto takie coś:

  1. <?php
  2. $str="[tag] wazne [/tag] bzdura bzdura";
  3.  
  4. $str = preg_replace("#[tag](.*?)[/tag]#si", '<b>1</b>', $str);
  5. ?>


po wywyołaniu wyżej wymienionej funkcji otrzymuje:
"test bzdura bzdura"

natomaist po:
  1. <?php
  2. $str = preg_replace("#[tag](.*?)[/tag]#si", '<b>2</b>', $str);
  3. ?>

otrzymam:
"bzdura bzdura"


jakoś z preg_* i inyymi funkacjami do zamiany nie moge sobie poradzić, jak najprościej wczytać to co jest pomiędzy znaczkami [tag] [/tag] do okreslonej zmiennej ?

pozdrawiam
Truvati
dyktek
preg-match-all poszukaj na forum bylo duży przykładów tego typu
siemakuba
  1. <?php
  2. $str = '[tag] wazne [/tag] bzdura bzdura';
  3. $str = preg_replace('/[tag]([^[]*)[/tag]/i', '<b>1</b>', $str);
  4. ?>

- zamiast (.*?) --> ([^\[]*) - bo musisz znalesc wszystkie znaki az do znaku [
- zmienilem tez markery # na / - stad wiecej slashy się kręci po wzorcu :)

pozdr.

edit
nie zauważyłem tego:
Cytat
jak najprościej wczytać to co jest pomiędzy znaczkami [tag] [/tag] do okreslonej zmiennej ?
ale @dyktek już odpowiedział co i jak.
bendi
Cytat(siemakuba @ 22.06.2006, 23:25 ) *
- zamiast (.*?) --> ([^\[]*)
Nie znasz się - jest coś takiego jak ungreedy-dot i właśnie tu jest poprawnie zastosowana. Poczytaj jeszcze trochę

@Truvati - sprawdziłem ten kod i wg mnie działa jak najbardziej poprawnie:
  1. <?php
  2.  
  3. $str="[tag] wazne [/tag] bzdura bzdura";
  4.  
  5.  
  6. $str = preg_replace("#[tag](.*?)[/tag]#si", '<b>1</b>', $str);
  7.  
  8.  
  9. ?>

Wyświetla:
Kod
<b> wazne </b> bzdura bzdura

Czyli jak widać wsio gra.

Co do zapisywania do zmiennej to preg_match_all" title="Zobacz w manualu php" target="_manual to nie jedyny sposób:
  1. <?php
  2.  
  3. $str="[tag] wazne [/tag] bzdura bzdura";
  4.  
  5. $aMatches = array();
  6.  
  7. $str = preg_replace("#[tag](.*?)[/tag]#sie", '$aMatches[] = trim( "1" );', $str);
  8.  
  9. print_r( $aMatches );
  10.  
  11. ?>

Co daje:
Kod
Array
(
    [0] => wazne
)
bim2
Mhh bendi bardzo dobrze (od ciebie umiem wyrażenia http://bedkowski.pl). Ale wydaje mi się że chcaił wyciąć wszystkie tagi ^^

  1. <?
  2. $str="[tag] wazne [/tag] bzdura bzdura [tag1]lala[/tag1]";
  3.  
  4. $aMatches = array();
  5.  
  6. $str = preg_replace("#[(.*)](.*?)[/(?:.*)]#sie", '$aMatches["1"] = trim( "2" );', $str);
  7.  
  8. print_r( $aMatches );
  9. ?>

Powinno być:
array(
"tag" => 'wazne' ,
"tag1" => 'lala'
)

PS> Co daje ? po (.*
bendi
Cytat(bim2 @ 23.06.2006, 11:27 ) *
Mhh bendi bardzo dobrze (od ciebie umiem wyrażenia http://bedkowski.pl).

Cieszę się smile.gif

Cytat(bim2 @ 23.06.2006, 11:27 ) *
Ale wydaje mi się że chcaił wyciąć wszystkie tagi ^^

Pewnie tak, ale tego nie napisał, a ja się ostatnio bardzo rozleniwiłem i jakoś szklana kula nie chce działać biggrin.gif

Jeżeli faktycznie tak jest to tam się nalezy jescze mała poprawka. Otóż skrypt w twojej wersji nie daje gwarancji, że szukane tagi będą sobie odpowiadać nawzajem, więc tak na czuja zmieniłbym to na:

  1. <?
  2. $str="[tag] wazne [/tag] bzdura bzdura [tag1]lala[/tag1]";
  3.  
  4. $aMatches = array();
  5.  
  6. $str = preg_replace("#[(.*)](.*?)[/1]#sie", '$aMatches["1"] = trim( "2" );', $str);
  7.  
  8. print_r( $aMatches );
  9. ?>


Dzięki czemu tag zamykający i otwierający będą do siebie pasować

Cytat(bim2 @ 23.06.2006, 11:27 ) *
PS> Co daje ? po (.*

Pisałem o ungreedy-dot - jak czytałeś mój kurs to w drugiej części jest przykład z komentarzami w stylu C (zaraz na samym początku). Ew można poszukać na http://www.regular-expressions.info/
truvati
dzięki wielkie za pomoc smile.gif
musze jeszcze poczytać trochę na ten temat wyrażeń regularnych... aby w przyszłości nie zawracać gitary smile.gif
splatch
Pozwolę sobie wtrącić swoje 3 grosze - przydatna może się okazać funkcja preg_replace_callback" title="Zobacz w manualu php" target="_manual
bim2
Do tego?? Przydatna do kolorowania składni php lub innych smile.gif ale raczej nie do tego biggrin.gif
bendi
Cytat(bim2 @ 23.06.2006, 17:18 ) *
Do tego?? Przydatna do kolorowania składni php lub innych smile.gif ale raczej nie do tego biggrin.gif

No bez przesady - oczywiście, że może się przydać. Tak samo jak preg_replace" title="Zobacz w manualu php" target="_manual zamiast preg_match_all" title="Zobacz w manualu php" target="_manual, ale jak zaznaczyłem w moim pierwszym poście, najlepszym rozwiązaniem jest ta druga, przykład z preg_replace" title="Zobacz w manualu php" target="_manual to tylko czepianie się smile.gif
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.