Toon posts:

[pcre] laatste characters

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben vreselijk slecht in PCRE, maar begin er wel steeds meer van te begrijpen. Ik ben bezig met wat zelfstudie en kwam op iets waar ik niet echt uit kwam:

Ik heb een string van een lengte die niet uitmaakt, de laatste 2-4 karakters zijn altijd "|"100", waar "100" een willekeurig getal is tussen de 0 en de 100 met danwel 1, dan wel 2, danwel 3 getallen.

Dat stukje wil ik graag benaderen, daar heb ik de volgende code voor bedacht:
code:
1
$str = preg_replace("!(.*)|(\D{0,3})$!", "\\2", $str);

Wat doe ik fout? Ik heb al op de PCRE reference van PHP gekeken, maar daar kon ik niet echt vinden wat ik zocht. Ik werk trouwens ook in PHP.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
| betekent 'of'. je moet em dus escapen (met \).

Verwijderd

Topicstarter
Gedaan.

Maar het helpt niet.

BTW: ik zal jullie even de symptomen geven, dan kunnen jullie beter diagnose stellen ;)

Ik voer
code:
1
œŸ®®œŸ;|59

dit in en hij spuugt niets uit.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
http://php.nederland.net/manual/nl/pcre.pattern.syntax.php :
The third use of backslash is for specifying generic character types:

\d
any decimal digit

\D
any character that is not a decimal digit
je moet dus \d hebben ipv \D

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 14:26

Tjark

DON'T PANIC

Die uitroeptekens moeten / zijn:

en moet het niet {1,3} zijn als je minstens 1 cijfer wilt matchen?
code:
1
$str = preg_replace("/(.*)\|(\d{1,3})$/", "\\2", $str);

en als je $str toch vervangt:
code:
1
$str = preg_replace("/.*\|(\d{1,3})$/", "\\1", $str);

*insert signature here


Verwijderd

Topicstarter
Neeh, want ik gebruik toch geen decimale getallen. Ik gebruik een rond getal. BTW: ik heb het al geprobeerd, maar het werkt ook niet...

Verwijderd

Topicstarter
Op zaterdag 16 februari 2002 17:54 schreef TjarkVerhoeven het volgende:
Die uitroeptekens moeten / zijn:

en moet het niet {1,3} zijn als je minstens 1 cijfer wilt matchen?
code:
1
$str = preg_replace("/(.*)\|(\d{1,3})$/", "\\2", $str);

en als je $str toch vervangt:
code:
1
$str = preg_replace("/.*\|(\d{1,3})$/", "\\1", $str);
Ok, bedankt het werkt!

  • Grum
  • Registratie: Juni 2001
  • Niet online
over die uitroeptekens .. dat is onzin .. dat is gewoon een valid delimiter ... daarnaast kan je dit soort dingen beter met explode/strrpos doen ofzo :)
Pagina: 1