Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> preg_replace ?
truvati
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 7.01.2006

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


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

Ten post edytował truvati 22.06.2006, 13:36:07
Go to the top of the page
+Quote Post
dyktek
post
Post #2





Grupa: Zarejestrowani
Postów: 240
Pomógł: 0
Dołączył: 18.01.2004
Skąd: rzeszów / kraków

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


preg-match-all poszukaj na forum bylo duży przykładów tego typu
Go to the top of the page
+Quote Post
siemakuba
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


  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.

Ten post edytował siemakuba 22.06.2006, 22:32:02
Go to the top of the page
+Quote Post
bendi
post
Post #4





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


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
)
Go to the top of the page
+Quote Post
bim2
post
Post #5





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


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 (.*
Go to the top of the page
+Quote Post
bendi
post
Post #6





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


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

Cieszę się (IMG:http://forum.php.pl/style_emoticons/default/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ć (IMG:http://forum.php.pl/style_emoticons/default/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/
Go to the top of the page
+Quote Post
truvati
post
Post #7





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 7.01.2006

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


dzięki wielkie za pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
musze jeszcze poczytać trochę na ten temat wyrażeń regularnych... aby w przyszłości nie zawracać gitary (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
splatch
post
Post #8





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Pozwolę sobie wtrącić swoje 3 grosze - przydatna może się okazać funkcja preg_replace_callback" title="Zobacz w manualu php" target="_manual
Go to the top of the page
+Quote Post
bim2
post
Post #9





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Do tego?? Przydatna do kolorowania składni php lub innych (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ale raczej nie do tego (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
bendi
post
Post #10





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


Cytat(bim2 @ 23.06.2006, 17:18 ) *
Do tego?? Przydatna do kolorowania składni php lub innych (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ale raczej nie do tego (IMG:http://forum.php.pl/style_emoticons/default/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ę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 11:46