Likes Likes:  0
Resultaten 1 tot 7 van de 7
Geen
  1. #1
    Jan Kuiken
    PHP regular expressions en square brackets
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    PHP regular expressions en square brackets

    ik wil in teksten dingen als [ilaatje01.jpg] vervangen door
    <img src="plaatje01.jpg">
    en doe dit met
    $inStr = ereg_replace('\[i.*)\]','<img src="\\1">",$inStr);

    dit gaat fout als er twee keer iets als [i:xxx] in de tekst voorkomt.
    In dat geval wordt de eerste [i: gematcht met de laatste ] .

    Het volgende plan was om de (.*) uit de expressie te vervangen
    door ([^\]]*) met de bedoeling om alles te matchen tot een ] ,
    maar er wordt helemaal niets gematcht.

    Het lijkt erop dat het escape karakter \ en de 'not' ^ niet goed
    samen gaan.

    Wie weet raad?

    Jan Kuiken







  2. #2
    robert
    PHP regular expressions en square brackets
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP regular expressions en square brackets

    Jan Kuiken <jan.kuiken@chello.nl>:
    > ik wil in teksten dingen als [ilaatje01.jpg] vervangen door
    > <img src="plaatje01.jpg">
    > en doe dit met
    > $inStr = ereg_replace('\[i.*)\]','<img src="\\1">",$inStr);
    >
    > dit gaat fout als er twee keer iets als [i:xxx] in de tekst voorkomt.
    > In dat geval wordt de eerste [i: gematcht met de laatste ] .


    Perl-compatible RE's gebruiken en non-greedy matchen:
    $inStr = preg_replace('\[i.*?)\]','<img src="\\1">",$inStr);
    ^ = non-greedy, eindigen bij de eerste ']'

    --
    robert

  3. #3
    Jan Kuiken
    PHP regular expressions en square brackets
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP regular expressions en square brackets

    robert wrote:
    > Jan Kuiken <jan.kuiken@chello.nl>:
    > > ik wil in teksten dingen als [ilaatje01.jpg] vervangen door
    > > <img src="plaatje01.jpg">
    > > en doe dit met
    > > $inStr = ereg_replace('\[i.*)\]','<img src="\\1">",$inStr);
    > >
    > > dit gaat fout als er twee keer iets als [i:xxx] in de tekst voorkomt.
    > > In dat geval wordt de eerste [i: gematcht met de laatste ] .

    >
    > Perl-compatible RE's gebruiken en non-greedy matchen:
    > $inStr = preg_replace('\[i.*?)\]','<img src="\\1">",$inStr);
    > ^ = non-greedy, eindigen bij de eerste ']'
    >


    Mijn dank is groot, ik kreeg nog wel een foutmelding maar door de RE
    te beginnen en eindigen met een / werkte het.
    $inStr = preg_replace('/\[i.*?)\]/', ....

    Jan Kuiken (, die RE's soms behoorlijk trickey blijft vinden ....)

  4. #4
    robert
    PHP regular expressions en square brackets
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP regular expressions en square brackets

    Jan Kuiken <jan.kuiken@chello.nl>:
    > Mijn dank is groot, ik kreeg nog wel een foutmelding maar door de RE
    > te beginnen en eindigen met een / werkte het.


    Ah ja, dat suffe PHP weer...

    --
    robert

  5. #5
    Jan Kuiken
    PHP regular expressions en square brackets
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP regular expressions en square brackets

    robert wrote:
    > Jan Kuiken <jan.kuiken@chello.nl>:
    > > Mijn dank is groot, ik kreeg nog wel een foutmelding maar door de RE
    > > te beginnen en eindigen met een / werkte het.

    >
    > Ah ja, dat suffe PHP weer...


    Nou nou nou, jij durft, ... PHP suf noemen ...

    Enfin, ik heb een werkende oplossing maar weet nog niet waarom
    de RE ([^\]]*) niet doet wat ik hoopte dat ie zou doen. Ik ga
    nog even wat documentatie doorspitten.

    Jan Kuiken

  6. #6
    robert
    PHP regular expressions en square brackets
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP regular expressions en square brackets

    Jan Kuiken <jan.kuiken@chello.nl>:
    > robert wrote:
    >> Jan Kuiken <jan.kuiken@chello.nl>:
    >> > Mijn dank is groot, ik kreeg nog wel een foutmelding maar door de RE
    >> > te beginnen en eindigen met een / werkte het.

    >>
    >> Ah ja, dat suffe PHP weer...

    >
    > Nou nou nou, jij durft, ... PHP suf noemen ...
    >
    > Enfin, ik heb een werkende oplossing maar weet nog niet waarom de RE
    > ([^\]]*) niet doet wat ik hoopte dat ie zou doen.


    Tussen [] mag je de ] (als karakter) niet escapen; dit werkt wel:
    ereg_replace('\[i[^]]*)\]', "<img src='\\1'>", $inStr);

    Je moet er overigens rekening mee houden dat de ']' in zo'n bracket
    expression het eerste karakter in de lijst moet zijn, afgezien van een
    eventuele '^'.

    --
    robert

  7. #7
    Jan Kuiken
    PHP regular expressions en square brackets
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP regular expressions en square brackets

    robert wrote:

    > > Enfin, ik heb een werkende oplossing maar weet nog niet waarom de RE
    > > ([^\]]*) niet doet wat ik hoopte dat ie zou doen.


    > Tussen [] mag je de ] (als karakter) niet escapen; dit werkt wel:
    > ereg_replace('\[i[^]]*)\]', "<img src='\\1'>", $inStr);


    Check! , deze werkt ook.
    blijft lastig, uitzondering op uitzondering ....

    > Je moet er overigens rekening mee houden dat de ']' in zo'n bracket
    > expression het eerste karakter in de lijst moet zijn, afgezien van een
    > eventuele '^'.


    .... en dan nog een extra voorwaarde

    Jan Kuiken

Webhostingtalk.nl

Contact

  • Rokin 113-115
  • 1012 KP, Amsterdam
  • Nederland
  • Contact
© Copyright 2001-2026 Webhostingtalk.nl.
Web Statistics