login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Reguliere expressie

Offline webrik - 18/04/2006 20:06 (laatste wijziging 18/04/2006 20:07)
Avatar van webrikHTML interesse Ik heb een probleem met een reguliere expressie: als ik nl. een reguliere expressie match met php 5, krijg ik qua aantallen altijd true:
  1. <?php
  2. if(ereg('a?','aa')){
  3. echo 'It fits!';
  4. }
  5. else {
  6. echo 'It doesn\'t fits';
  7. }
  8. ?>

krijg ik altijd It fits!
ook bij
  1. <?php
  2. if(ereg('a{1,2}','aaa')){
  3. echo 'It fits!';
  4. }
  5. else {
  6. echo 'It doesn\'t fits';
  7. }
  8. ?>

heb ik dit, waar ligt dit aan??

7 antwoorden

Gesponsorde links
Offline Richard - 18/04/2006 20:08
Avatar van Richard Crew algemeen 1) gebruik preg ipv ereg (sneller + beter)

2) je matcht niet van begin tot eind ^/$. dit betekent dat hij dus willekeurig zoekt naar wel of niet een a (de eerste), wat dus altijd waar is. de 2e is hetzelfde, alleen dan 1 of 2 keer, wat ook waar is. (aangezien je bij geen van beiden van begin tot eind matcht)
Offline webrik - 18/04/2006 20:10 (laatste wijziging 18/04/2006 20:12)
Avatar van webrik HTML interesse bedoel je preg_match()
[edit]
dat met die ^$ werkt!
Offline webrik - 18/04/2006 20:15 (laatste wijziging 18/04/2006 20:26)
Avatar van webrik HTML interesse maar met preg match krijg ik deze foutmelding:
Citaat:
Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in [path]regex.php on line 16

en de code
  1. <?php
  2. preg_match('^(a?)$','a');
  3. ?>


maar bij ereg doetie het wel!
Offline timo - 18/04/2006 20:31
Avatar van timo PHP ver gevorderde preg gebruikt weer iets andere regels, zet er een 2 !'s omheen...
Offline Stijn - 18/04/2006 20:35
Avatar van Stijn PHP expert je moet een delimiter hebben http://be.php.net/pcre (zie voorbeelden)
een delimiter kan alles zijn, ik gebruik vaak {} rond me expressie.

  1. <?php
  2. preg_match('{^(a?)$}','a');
  3. ?>

Offline Richard - 18/04/2006 20:40
Avatar van Richard Crew algemeen @timo: de ! is ZEER af te raden, ivm wat ! in regexes kan betekenen (bijv. (?!(?=b)b[a-z]*|[a-z]+) - loos voorbeeld, maar werkt niet met ! als delimiter - ook niet te escapen).

@stijn1989: { en } als delimiter is wel slim, maar ik prefereer ~~, aangezien het makkelijk te escapen is, en geen waarde heeft voor regexes;)
Offline webrik - 19/04/2006 17:16
Avatar van webrik HTML interesse dit begrijp ik niet
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.229s