Toon posts:

[PHP] preg_replace probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met een probleem bij het edit gedeelte van m'n forum.
Als iemand meerdere keren de UBB code [ url=HierURL]Omschrijving[ /url] in z'n post gebruikt,
en die dan wil aanpassen dan gaat er wat goed fout. :(

In het edit vak komt dan bijv. dit te staan:

Bezoek een m'n site [ url=HierURL target=_New>Omschrijving</a>,
owja en ook deze deze site is cooool: <a href=Hier2eURL]2eOmschrijving[ /url]


M'n script ziet dus alles tussen de eerste [ url= en de laatste [ /url] als een gedeelte.
Maar het moet er dus zo uitzien in het edit vak:

Bezoek een m'n site [ url=HierURL]Omschrijving[ /url],
owja en ook deze deze site is cooool: [ url=Hier2eURL]2eOmschrijving[ /url]



Ik gebruik deze code (Die dus niet optimaal werkt):
PHP:
1
2
3
<?
$Bericht = preg_replace("|(<a href=)(.*)( target=_New>)(.*)(</a>)|i", "[url=\\2]\\4[/url]", $Bericht);
?>

Hopelijk is het duidelijk genoeg :)

  • Onno
  • Registratie: Juni 1999
  • Niet online
Verander (.*) in (.*?) en het werkt zoals je wilt. :)

(standaard zijn perl regexen greedy: ze proberen een zo groot mogelijke lap tekst te matchen. door die ? erachter maak je 't non-greedy)

Verwijderd

Topicstarter
Op zaterdag 02 juni 2001 15:51 schreef Onno het volgende:
Verander (.*) in (.*?) en het werkt zoals je wilt. :)

(standaard zijn perl regexen greedy: ze proberen een zo groot mogelijke lap tekst te matchen. door die ? erachter maak je 't non-greedy)
Tnx a lot!..
Zoiets kleins is het, en daar heb ik uren over zitten piekeren :D

  • Onno
  • Registratie: Juni 1999
  • Niet online
99.99999999% van de wereldbevolking regext na het lezen van een tutorial niet meteen foutloos hoor... jij wel? Dan heb ik nog wel wat leuke regex probleempjes voor je. >:)

Verwijderd

Topicstarter
Op zaterdag 02 juni 2001 15:57 schreef Ronaldo22 het volgende:
Weleens een tutorial gelezen?
Jawel, maar vast over het hoofd gezien ofzo :(

  • tomato
  • Registratie: November 1999
  • Niet online
Of

([^[:space:]]+)

Is eigenlijk mooier, want dan kun je het ook in een ereg_replace() gebruiken :+

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op zaterdag 02 juni 2001 16:03 schreef tomato het volgende:
Of

([^[:space:]]+)
Leuk, dus je mag tussen > en </a> geen spaties meer gebruiken? Lijkt me niet zo'n denderende oplossing...
Is eigenlijk mooier, want dan kun je het ook in een ereg_replace() gebruiken :+
ereg_replace? Mooi? Het verband ontgaat me... :+

  • tomato
  • Registratie: November 1999
  • Niet online
Op zaterdag 02 juni 2001 16:06 schreef Onno het volgende:
Leuk, dus je mag tussen > en </a> geen spaties meer gebruiken? Lijkt me niet zo'n denderende oplossing...
Pardon, voor de URL geldt het wel, maar voor de omschrijving idd uiteraard niet. Daar zul je lazyness voor moeten gebruiken (of je krijgt andere restricties).
ereg_replace? Mooi? Het verband ontgaat me... :+
Dat zei ik niet :)
Het is mooi dat je het dan ook in een POSIX regex _kunt_ gebruiken als je bijv geen PCRE bij de hand hebt ofzo...

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op zaterdag 02 juni 2001 16:11 schreef tomato het volgende:
Pardon, voor de URL geldt het wel, maar voor de omschrijving idd uiteraard niet. Daar zul je lazyness voor moeten gebruiken (of je krijgt andere restricties).
Lazy is weer heel wat anders... ;)
Dat zei ik niet :)
Het is mooi dat je het dan ook in een POSIX regex _kunt_ gebruiken als je bijv geen PCRE bij de hand hebt ofzo...
Hmja. Zorgen dat je niet in die situatie komt vind ik dan een makkelijkere oplossing. :P

(wat ik gaf werkt trouwens toch ook wel met POSIX regexen?)
</off-topic>

  • tomato
  • Registratie: November 1999
  • Niet online
Op zaterdag 02 juni 2001 16:15 schreef Onno het volgende:
(wat ik gaf werkt trouwens toch ook wel met POSIX regexen?)
Nee, POSIX regexen zijn een stuk minder slim dan Perl regexen. In een POSIX regex zijn quantifiers _altijd_ greedy ;(

  • Onno
  • Registratie: Juni 1999
  • Niet online
Hmm... mooi is dat. Naja, weer een pluspunt van perl regexen geleerd. :)
Pagina: 1