Toon posts:

[Java] Regex-probleempje

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik moet regels uit een bestand inlezen waarin een veranderlijke component staat, er kan staan:

f getal/getal/getal
f getal/getal
f getal//getal
f getal

Nu dacht ik dit met regular expressions op te lossen, maar er is een probleempje bij het matchen. Als ik een input zoals in de eerste regel krijg, dan matcht het niet met mijn programmaregel "[0-9]+/[0-9]+/[0-9]+" maar wel met "[0-9]+". De controle op het eerste gebeurt ook als eerste, het is niet dat het programma niet de kans krijgt om te checken op twee /'s.

Ik dacht eerst dat / geen geldig regex-character is, maar nergens in de Java-documentatie wordt gewag gemaakt van / als speciaal character.

Iemand raad?

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

Je moet de forwardslash escapen met een backslash:

"[0-9]+\/[0-9]+\/[0-9]+"

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


Verwijderd

Topicstarter
jAnO! schreef op maandag 18 april 2005 @ 17:25:
Je moet de forwardslash escapen met een backslash:

"[0-9]+\/[0-9]+\/[0-9]+"
Dan geeft Eclipse een "invalid escape sequence" (wat ik vergeten vermelden was).

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-04 03:55

Nick_S

++?????++ Out of Cheese Error

En van Java moet je backslashes weer escapen door een extra backslash, dus:

code:
1
[0-9]+\\/[0-9]+\\/[0-9]+


Door zulke dingen vind ik regexp en java toch niet zo fijn werken...

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • Onno
  • Registratie: Juni 1999
  • Niet online
jAnO! schreef op maandag 18 april 2005 @ 17:25:
Je moet de forwardslash escapen met een backslash
/ is geen speciaal teken in Java regexen en hoeft dus ook niet ge-escaped te worden.

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

Onno schreef op maandag 18 april 2005 @ 17:38:
[...]

/ is geen speciaal teken in Java regexen en hoeft dus ook niet ge-escaped te worden.
check, my bad...

---edit:


Pattern p = Pattern.compile("[0-9]+/[0-9]+/[0-9]+");
Matcher m = p.matcher("12/2356/8888" );
System.out.println(m.matches());


geeft bij gewoon true terug..

[ Voor 32% gewijzigd door jAnO! op 18-04-2005 18:17 ]

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


Verwijderd

Topicstarter
jAnO! schreef op maandag 18 april 2005 @ 17:59:
[...]


check, my bad...

---edit:


Pattern p = Pattern.compile("[0-9]+/[0-9]+/[0-9]+");
Matcher m = p.matcher("12/2356/8888" );
System.out.println(m.matches());


geeft bij gewoon true terug..
if(Pattern.compile("[0-9]+/[0-9]+/[0-9]+").matcher((String)(parameters.elementAt(0))).matches())

Dit is toch exact hetzelfde? :/

-mod-: ok ok, ik heb de fout gevonden: die parameters.elementAt(0) geeft een "1" terug bij een voorbeeld, daar waar 1/1/1 staat in de file. Zeer vreemd, aangezien ik eerst tokenizede op " " en niet op "/" ...

-mod²-: ok, nevermind, het is weer één van die typische codingfouten: foute input ... Ik parste steeds een plane2.obj en dacht dat ik plane.obj parste ... :)

[ Voor 38% gewijzigd door Verwijderd op 18-04-2005 19:58 ]

Pagina: 1