Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Problem - regexy
pieto
post
Post #1





Grupa: Zarejestrowani
Postów: 227
Pomógł: 1
Dołączył: 12.05.2002
Skąd: gdańsk

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


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
Go to the top of the page
+Quote Post
rolnix
post
Post #2





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 16.04.2005
Skąd: Białowieża

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


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...

Ten post edytował rolnix 16.04.2005, 16:04:08
Go to the top of the page
+Quote Post
splatch
post
Post #3





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

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


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.

Ten post edytował splatch 16.04.2005, 16:45:23
Go to the top of the page
+Quote Post
pieto
post
Post #4





Grupa: Zarejestrowani
Postów: 227
Pomógł: 1
Dołączył: 12.05.2002
Skąd: gdańsk

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


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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

aha i jeszcze moze jakis pomysl by w linku podminial spacje na _ (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

pozdrawiam i z gory dzięki...
Go to the top of the page
+Quote Post
bendi
post
Post #5





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

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
pieto
post
Post #6





Grupa: Zarejestrowani
Postów: 227
Pomógł: 1
Dołączył: 12.05.2002
Skąd: gdańsk

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


(IMG:http://forum.php.pl/style_emoticons/default/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 _ (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

pozdr. dzięki..

Ten post edytował pieto 18.04.2005, 00:58:04
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: 23.08.2025 - 02:11