login  Naam:   Wachtwoord: 
Registreer je!
 Forum

regex (Opgelost)

Offline qubus - 13/09/2014 12:04
Avatar van qubusLid Hallo,

Ik wil een bb-code omzetten in html. Deze bb code kan er op 2 manieren uitzien:
[img] of [img xxx]
hierbij is het de bedoeling dat bij de [img xxx] de xxx de class naam wordt in het html deel. Maar die kan er dus ook niet staan!

dus :
[img]http://www.mijnsite.nl/uoload/plaatje.png[/img] moet worden
<img src="http://www.mijnsite.nl/uoload/plaatje.png" />
en [img xxx]http://www.mijnsite.nl/uoload/plaatje.png[/img] moet worden
<img src="http://www.mijnsite.nl/uoload/plaatje.png" class="xxx"/>

Ik heb nu:

  1. $text = preg_replace("(\[img\]http://([a-z0-9_\-\.\/:]+?)\[/(?:img)?\])i", "<img src=\"http://$1\" border=\"0\">", $text);


Dit werkt bij de [img], maar niet bij de [img xxx]

Iemand een idee hoe ik hem moet aanpassen zodat hij in beide gevallen werkt?

Alvast bedankt!

1 antwoord

Gesponsorde links
Offline Thomas - 13/09/2014 14:51 (laatste wijziging 13/09/2014 15:07)
Avatar van Thomas Moderator Ik weet niet precies of die expressie de lading altijd dekt ingeval een URL, zie ook dit topic.

Daarnaast wellicht enkele tips:
- gebruik enkele quotes voor strings, dan hoef je dubbele quotes ook niet te escapen
- het gebruiken van ( haken ) voor je regexp als delimiters heb ik nog niet eerder gezien, ik weet niet of dit een verstandige keuze is, aangezien deze binnen de regexp een speciaal (en ander) doel dienen; ik gebruik meestal het # hash karaker #

Dat gezegd hebbende, wat je wilt is een optioneel subpatroon, dit geef je aan met een vraagteken achter het patroon. Dus zoiets:

  1. <?php
  2. $text = preg_replace('#\[img(\040([a-z]+))?]http://([a-z0-9_\-\.\/:]+?)\[/(?:img)?]#i', '<img src="http://$3" class="$2" border="0" />', $text);
  3. ?>


EDIT: Het relevante deel is (\040([a-z]+))?, die \040 is een spatie.

De "indexen" van je subpatronen veranderen dan wel: de class is (altijd) te vinden op index 2 (ook al bestaat deze niet, de waarde is dan leeg) en de URL op index 3.

Pas je op deze invoer verder nog output escaping toe? Dat wil zeggen, draag je er zorg voor dat je invoer wordt ontdaan van passages die voor JavaScript / HTML aangezien kunnen worden?
Bedankt door: qubus
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.206s