Likes Likes:  0
Resultaten 1 tot 2 van de 2
Geen
  1. #1
    Dennis
    [PHP] Regular expression met /* in string
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    [PHP] Regular expression met /* in string

    Ik heb een regular expression in PHP om .nl domeinnamen te controleren.
    Deze ziet er als volgt uit:

    preg_match("/^[a-z0-9]+(-?[a-z0-9]+)+\.nl$/", $domein_adjusted,$matches)

    Dit werkt op zich prima, maar geeft een fout bij de volgende waarde voor
    $domein_adjusted:

    1234567892345781234684769123123456789/*.nl

    Php (versie 4.3.2) zegt dat de maximum execution time wordt overschreden.
    Het vreemde is nu dat andere regular expressions geen moeite hebben met
    deze string en dat ook bijvoorbeeld 1234684769123/*.nl er zonder moeite
    doorheen komt.

    Frapant is dat ook een oudere versie van Editpad Pro crashde met dezelfde
    expressies. Is dit een bekende fout, of zie ik iets stoms over het hoofd?

    Dennis

  2. #2
    robert
    [PHP] Regular expression met /* in string
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: [PHP] Regular expression met /* in string

    Dennis <dennis@spreekjemoerstaal.nl>:
    > Ik heb een regular expression in PHP om .nl domeinnamen te controleren.
    > Deze ziet er als volgt uit:
    >
    > preg_match("/^[a-z0-9]+(-?[a-z0-9]+)+\.nl$/", $domein_adjusted,$matches)
    >
    > Dit werkt op zich prima, maar geeft een fout bij de volgende waarde voor
    > $domein_adjusted:
    >
    > 1234567892345781234684769123123456789/*.nl
    >
    > Php (versie 4.3.2) zegt dat de maximum execution time wordt overschreden.


    Heeft te maken met de hoeveelheid manieren waarop bovengenoemde RE een
    string kan matchen. Als je de RE herschrijft duurt het nog steeds erg
    lang: /([0-9]+)+\.nl$/

    Juist omdat die RE niet matcht met $domein_adjusted (vanwege de /* die
    daarin staan) gaat de RE-engine continu backtracken om te kijken of er niet
    een andere manier is om die string te matchen. En dat gaat, denk ik, zo
    ongeveer als volgt:
    - 1
    - 1, 2
    - (1, 2), 3
    - 1, (2, 3)
    - (1, 2, 3), 4
    - (1, 2), (3, 4)
    - 1, (2, 3, 4)
    - 1, (2, 3), 4
    - 1, (2, 3, 4)
    ....

    Hoe langer de string, des te langer het duurt om erachter te komen dat het
    _echt_ niet matcht. En de tijd die dat kost stijgt exponentieel aan de
    lengte van de string die je probeert te matchen.

    Je zult 'em moeten herschrijven, en daarbij moet je rekening houden met het
    feit dat constructies in de vorm (.+)+ proberen op gaan leveren.

    --
    robert

Webhostingtalk.nl

Contact

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