Autor Zpráva
Neas
Profil
Ahoj.
Chtěl jsem do své návštěvní knihy přidat funkci, která automaticky převede odkazy na <a href="neco">neco</a>. Na internetu jsem našel regulární výraz, pomocí kterého se mi povedlo sesmolit toto:
$telo = preg_replace("@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@", "<a href='$1'>$1</a>", $telo);

A také to funguje. Ale chtěl bych také, aby moje návštěvní kniha uměla vyhodnocovat BBcody. Ty se mi zatím dařilo vytvářet úspěšně, tedy například:
$telo = preg_replace("(\[b\](.+?)\[\/b\])", "<strong>$1</strong>", $telo);

Nicméně narazil jsem na problém při vytváření [url] BBcodu. Aby mi výše uvedený kód nepřeměnil i odkazy uzavřené mezi [url] a [/url], potřeboval bych jeho regulární výrazu nějak upravit, leč tady mě již znalosti zradily.
Budu vděčný za vaše rady,
děkuji

EDIT: a když už se ptám zrovna na tohle, rád bych se také dozvěděl, jaký je rozdíl mezi (.+?) a (.*). Zkoušel jsem oboje (viz. druhý uvedený kód) a oboje fungovalo stejně. + také jsem nikde nenašel, co vlastně znamená ten @ v prvním kódu
Joker
Profil
Tady jsou regulární výrazy pro převod BB-značek.

Neas:
jaký je rozdíl mezi (.+?) a (.*)
.+ je jeden nebo více libovolných znaků.
.* je žádný, jeden nebo více libovolných znaků.
V .+? ten otazník je líný kvantifikátor. V líném režimu se vybere nejkratší řetězec vyhovující regulárnímu výrazu. Normální (nenasytný) režim bere naopak nejdelší řetězec.
Příklad- nenasytný režim, výraz: #[b].*[/b]# vybere zvýrazněnou část:
začátek [b]něco[/b] něco jiného [b]něco dalšího[/b] konec
Líný režim, výraz: #[b].*?[/b]# vybere:
začátek [b]něco[/b] něco jiného [b]něco dalšího[/b] konec
Neas
Profil
Joker:
aha.. a jak docílit toho, aby mi to vzalo takhle?
začátek [b]něco[/b] něco jiného [b]něco dalšího[/b] konec

EDIT: po testech jsem zjistil, že (.+?) mi to vybere, jak potřebuji. To už je tedy jedno, funguje to, teď bych rád vyřešil svůj problém s převodem URL

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0