Some of posts from this blog has been moved to dywicki.pl. You will be automatically redirected to new blog if you would submit comment.
New posts are published on dywicki.pl, this blog contains old content and it is not continued.

Niektóre posty z tego bloga zostały przeniesione do dywicki.pl. Zostaniesz automatycznie przekierowany jeśli bedzięsz chciał dodać komentarz.
Nowe posty sa publikowane na dywicki.pl, ten blog zawiera stare treści i nie jest kontynuowany.

Wyrażenia regularne

Filed under PHP by

Od niechcenia spojrzałem dzisiaj na forum. I co widzę? Temat (php) Problem – regexy. Jako, że mam jako-takie pojęcie na temat regexpów to zobaczyłem o co chodzi. Okazało się, że to nic wielkiego, problem ze zmianą [[link]] na wersję zdatną do klikania. Jedynym problemem było to, że drugi parametr jest opcjonalny. Zacząłem myśleć, już po chwili miałem gotowy wzór, który pasował do [[link]] oraz [[link|opis]]. Zastanawiało mnie jedno – czy da się wykorzystać w preg_replace; ten wzór.. Niestety nie udało mi się do tego dojść mimo lektury bardzo dobrego poradnika na temat wyrażeń. Udało mi się w końcu zrodzić drugi wzór, znacznie bardziej skomplikowany, na zasadzie pod-wyrażeń warunkowych.

<?php
// tekst do przerobki $text = '&#91;&#91;link|tata&#93;&#93;';
// wersja z podwyrazeniami (niezaimpletowana w funkcji)
$regexp = '/(?(?=&#91;&#91;(?:.+)|(?:.+)&#93;&#93;)&#91;&#91;(.+)|(.+)&#93;&#93;|&#91;&#91;(.+)&#93;&#93;)/';

// wersja alternatywna;)
$regexp = '/&#91;&#91;(.+?)(?:|(.+))?&#93;&#93;/';
$tex2 = preg_replace_callback($regexp,'wiki_link',$text);

function wiki_link($mat) {
     if (sizeof($mat) == 3) {
         // jest drugi parametr - &#91;link|opis&#93;
         return '<a href="'. $mat&#91;1&#93; .'" title="'. $mat&#91;0&#93; .'">'. $mat[2] .'</a>';
     }  
     return '<a href="'. $mat&#91;1&#93; .'" title="'. $mat&#91;0&#93; .'">'. $mat[1] .'</a>';
}
?>

No responses yet

Leave a Reply