Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyrazenia regularne
Forum PHP.pl > Forum > PHP
marcio
Chcialem sie zapytac jakie sa ronice pomiedzi ereg_replace, str_replace i preg_replace czytam o tym na necie ale nie widze roznice oprocz tego ze trzeba wpisac inne argumenty do funkji ale czy dzialanie jest takie same??Pytam poniewaz zaczolem poprawiac moj kod i bbcode zrobilem za pomoca str_replace lecz widze ze wiekszosc bbcode'ow jest zrobione za pomoca preg_replace i dzieki za odpowiedzi
devnul
str_replace - podmienia tekst dokłądnie taki sam jak podany jako wzorzec, ereg i preg podmieniają zgodnie z wzorcem podanym jako wyrażenie regularne - preg_replace ma ponadto większe możliwości budowania wyrażeń regularnych od ereg_replace. na temat dokładnych różnic poczytasz w manualu
marcio
czyli cos takiego w moim bbcod'zie jest poprawne
$zmien = str_replace(":D","<img src='obrazki/biggrin.gif' />", $zmien);
devnul
jak najbardziej, ale postaraj się wstawiac wyrazenia w tablice (jesli jest ich więcej) zamiast duplikowac linie z zamianą kodu, jest to szybsze.
  1. <?php
  2. $zmien = str_replace(array(":D","lol"),array("<img src='obrazki/biggrin.gif' />",""<img src='obrazki/lol.gif' />"), $zmien);
  3. ?>
marcio
to wytlumacz mi jaka bedzie roznica jak zrobie takie 2 wersje kodu

Kod
$zmien = str_replace("[i]","<i>", $zmien);

i
Kod
$zmien = preg_replace("#\[i\](.*?)\[/i\]#si", "<i>\\1</i>", $zmien);


bede ci bardzo wdzieczny
matix
Nie ma róznicy. Str_replace jest już nierozwijane, tak przynajmniej słyszałem. Preg, czyli wyrażenia są po prostu lekko szybsze. To wszystko - mimo wszystko dla takich prostych rzeczy jak BBCODE, bardziej polecam str_replace, ze wzledu na prostote:


  1. <?
  2. $aBbcode = array ('biggrin.gif', ':S', 'tongue.gif', 'ohmy.gif', '[b]', '[i]');
  3. $aBbto = array ('smiech.jpg', 'sux.jpg', 'jezyk.jpg', 'oo.jpg', 'pogrub.jpg', 'italic.jpg');
  4.  
  5. str_replace($aBbcode, $aBbto, $sString);
  6. ?>


pozdrawiam smile.gif
zimi
@matix: co Ty za pierdoły opowiadasz?
co to ma znaczyć, że str_replace jest juz nierozwijane, prace nad tą funkcją zostały już z pewnością skończone
preg_replace też już jest "nierozwijane" jej edycja (jak i całych wyrażeń regularnych w PHP) prawdopodobnie nastąpi wtedy gdy twórcy uznają że jakaś opcja wyrażeń regularnych może okazać się przydatna
Wyrażenia są szybsze? wolne żarty... jak coś jest prostsze to jest szybsze a str_replace jest prostsze, ma mniejsze możliwości
@marcio: różnica będzie między innymi taka że str_replace w przypadku który podałeś zamieni jedynie [ i ] na <i>, a preg_replace również [ /i ] na </i> za sprawą wzorca
funkcja str_replace służy do zamieniania konkretnego ciągu na inny konkretny ciąg, ciągu który w Twoim wypadku składa się z trzech liter "[ i ]" i tylko nich na inny konkretny ciąg
a wyrażenia regularne to wyrażenia regularne, zamieniają ciągi które pasują do wzorca, a nie wyszukują kropka w kropkę tego wzorca i go nie zamieniają, jak tego nie rozumiesz to brak mi słów
porównaj sobie ew. działanie takich dwóch funkcji:
  1. <?php
  2. $zmien = preg_replace("#(.*?)#si", "<i>1</i>", $zmien);
  3. ?>

  1. <?php
  2. $zmien = str_replace("#(.*?)#si", "<i>1</i>", $zmien);
  3. ?>

a jak różnicy nie pojmiesz no to nie mam pojęcia co mógłbym Ci poradzić
marcio
oki mniej wiecej juz rozumiem str_replace uzywa sie dla prostoty a preg_replace dla wyrazen bardziej skomplikowanych ale czy taki kod ktora ma tworzyc linki:
Kod
<?php
$zmien = preg_replace("#\[url=(.*?)?(.*?)\](.*?)\[/url\]#si", "<A HREF='\\2' TARGET='top'>\\3</A>", $zmien);
?>

moge zrobic tak?
Kod
<?php
$zmien = str_replace("[url]", "<a href="">", $zmien);
$zmien = str_replace("[/url]", "</a>", $zmien);
?>

czy tak tez moze byc??Czy muszae dopisac tak
Kod
<?php
$zmien = str_replace("[url]", "<a href="\\1">\\2", $zmien);
$zmien = str_replace("[/url]", "</a>", $zmien);
?>

bo z tego co widze to \\1 i \\2 znaczy ze \\1 to pierwszy argument funkcji jaki trzeba wpisac poprawcie mnie jak mozecie poniewaz skadnia preg_replace mi sie nie podoba i tak btw to wiem ze mozna to zrobic latwiej za pomoca tablicy array ale jak narazie musze poznac dobrze skaldnie php
Sedziwoj
Porównaj
  1. <?php
  2. $zmien = 'cosooooooo[i]inne[/i]ffffvvv';
  3. $zmien = preg_replace("@[i](.*)@U", "<i>1</i>", $zmien);
  4. var_dump($zmien);
  5. ?>

i
  1. <?php
  2. $zmien = 'cosooooooo[i]inne[/i]ffffvvv';
  3. $zmien = str_replace(array("[i]",""), array("<i>","</i>"), $zmien);
  4. var_dump($zmien);
  5. ?>

Jest różnica?
A w czasie nie aż tak wielka, a wyrażenie regularne sprawdza poprawność zamykania znaczników (co najwyżej możesz dodać modyfikator i)
marcio
tego nie rozumiem
"a wyrażenie regularne sprawdza poprawność zamykania znaczników (co najwyżej możesz dodać modyfikator i)"
a potem sprawdze co mi wyswietli przy var_dump() i czy ten bbocde do adresow www jest dobry?

okey napisze na nowo bbcode'a bo kolega mi powiedzial ze jesli ktos wpisze tylko [i]sssss bez [/iu] to i tak tekst pogrubi bo str_replace zamiania tylko tekst i do tego mam uzyc preg_replace i ereg_replace czy on ma racje?

i jeszcze jedno czy ktos z was zna jakis latwy i po polsku artukol o preg_replace??
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.