Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem - regexy
Forum PHP.pl > Forum > PHP
pieto
mam linki w postaci [[link do strony]] lub [[link do strony|inna nazwa]]
i teraz jak zrobic takie cos:

jeżeli występuje coś po separatorze | niech podstawi tą nazwę w przeciwnym wypadku niech podstawia "link do strony"

z góry dzięki
rolnix
Musisz pokombinować z warunkami i wyrażeniami regularnymi... w kursie ze stronki http://web.archive.org/web/20041109173849/...es/php/regex/1/ widzałem taki skrypcik:

  1. <?php
  2. $tekst ='<A href=\"\">www.strona.pl</A>';
  3. echo preg_replace('/<A href=\"\">(.*)</A>/', '<A href=\"http://$1\">$1</A>', $tekst);
  4. ?>


Może to cię jakoś nakieruje =) Na przyszłość: wyrażaj się jaśniej, miałem problemy ze zrozumieniem...
splatch
Jedynym rozsądnym rozwiązaniem jest użycie preg_replace_callback (już kombinuję nad tym). Zaraz odpowiem.

Edit - odpowiedź
  1. <?php
  2.  
  3. # tekst do przerobki
  4. $text = '[[link|tata]]';
  5.  
  6. # wersja z podwyrazeniami (niezaimpletowana w funkcji)
  7. $regexp = '/(?(?=[[(?:.+)|(?:.+)]])[[(.+)|(.+)]]|[[(.+)]])/';
  8.  
  9. # wersja alternatywna;)
  10. $regexp = '/[[(.+?)(?:|(.+))?]]/';
  11.  
  12. $tex2 = preg_replace_callback($regexp,'wiki_link',$text);
  13.  
  14. function wiki_link($mat) {
  15. if( sizeof($mat) == 3 ) { # jest drugi parametr - [link|opis]
  16. return '<a href=\"'. $mat[1] .'\" title=\"'. $mat[0] .'\">'. $mat[2] .'</a>';
  17. }
  18. return '<a href=\"'. $mat[1] .'\" title=\"'. $mat[0] .'\">'. $mat[1] .'</a>';;
  19. }
  20.  
  21. ?>


Jeśli potrzebujesz dokładnie sprawdzać linki użyj parse_url lub kolejnego regexpa w wiki_link.
pieto
Witam,
dzieki za przykład, ale jeszcze maly problem funkcja dziala do momentu

gdy $text = '[[link|tata]]';
jesli $text = 'blblblablabb [[link|tata]] cvxxcvxcv [[link2|tata2]] blablablba'; to sie kopie sad.gif

aha i jeszcze moze jakis pomysl by w linku podminial spacje na _ questionmark.gif

pozdrawiam i z gory dzięki...
bendi
Cytat(splatch @ 2005-04-16 17:36:07)
Jedynym rozsądnym rozwiązaniem jest użycie preg_replace_callback (już kombinuję nad tym).

Oj niekoniecznie snitch.gif
  1. <?
  2. $t='blblblablabb [[link|tata]] cvxxcvxcv [[link2|tata2]] blablablba';
  3. echo preg_replace( '%[[([^|]+)|?(.*?)]]%e', '\"<a href=\"\".str_replace(\" \",\"_\", $1).\"\">\".(strlen(\"$2\")?\"$2\":\"$1\").\"</a>\"', $t );
  4. ?>

Voila biggrin.gif
pieto
smile.gif Heh, kicha:

Parse error: parse error in c:\usr\krasnal\www\zgapa.pl\zgapedia2\view.php(356) : regexp code on line 1

Fatal error: Failed evaluating code: "".(strlen("holenderski")?"holenderski":"30 marca]] [[1853]] r. - zm. [[29 lipca]] [[1890]] r.) - [[Holandia")."" in c:\usr\krasnal\www\zgapa.pl\zgapedia2\view.php on line 356

( dalem tak:
$content = preg_replace( '%\[\[([^\|]+)\|?(.*?)\]\]%e', '"<a href=\"".str_replace(" ","_", $1)."\">".(strlen("$2")?"$2":"$1")."</a>"', $content );
)

---------------------------------------
pokombinowalem jeszcze trochę to stworzyłem coś takiego

$content=preg_replace('%\[\[(.*?)(?:\|(.*?))?\]\]%e','"<a href=view.php?name=".ucfirst("$1").">".(strlen("$2")?"$2":"$1")."</a>"',$content);

teoretycznie jakos tam dziala, zobaczymy co dalej...
mam teraz inny problem

jak to przerobic by w linku zamieniał spację na _ questionmark.gif

pozdr. dzięki..
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.