Ik wil getallen omzetten naar breuken, als dat kan. Dat hangt er dus vanaf of er een repeterend patroon in het getal opduikt.
als voorbeelden:
0.3453333333333333
0.3333333333333333
0.1231231231231573
0.3457342502365349
de eerste heeft een repeterend patroon na wat begin gerommel wat ik wil hebben is ["345","3"], dus het beginstuk en het patroon
de tweede heeft geen begin stuk, dus wil ik ["","3"]
bij de derde zit er gerommel achteraan (komt door beperkte nauwkeurigheid), dat wil ik gewoon negeren, dus wat ik hier terug wil is ["","123"]
bij de vierde is geen repeterend patroon, dus alleen begin rommel: ["3457342502365349",""]
hoe nu de regex?
wat ik eigenlijk bedacht is het volgende:
- de eerste * non greedy, omdat ie anders het repeterende patroon ook opeet
- de eerste + ook non greedy, om dezelfde reden
- de tweede * wel greedy om er zoveel mogelijk te pakken
dit levert problemen op, namelijk
- met de + op non greedy pakt ie maar 1 getal, omdat de tweede * matched op repeterende digits, en niet steeds hetzelfde repeterende getal of groep getallen, wat ik dus wil
- de tweede * mag wel 0 keer matchen (geen repeterend blok), maar als ie 1 keer matched heb ik dus ook geen repetitie, maar alleen "begin rommel" (laatste voorbeeld). Alleen wordt het dus doorde tweede * gematched en niet door de eerste omdat de tweede greedy is en de eerste niet. Bij meer dan 1 keer matchen heb ik uiteraard een repetitie
rara, hoe los ik dit nu op?
edit: @hieronder: programming is ook goed, maar het is wel javascript, is dus van belang voor de nauwkeurigheid van getallen en ook niet alle regex modifiers werken.
als voorbeelden:
0.3453333333333333
0.3333333333333333
0.1231231231231573
0.3457342502365349
de eerste heeft een repeterend patroon na wat begin gerommel wat ik wil hebben is ["345","3"], dus het beginstuk en het patroon
de tweede heeft geen begin stuk, dus wil ik ["","3"]
bij de derde zit er gerommel achteraan (komt door beperkte nauwkeurigheid), dat wil ik gewoon negeren, dus wat ik hier terug wil is ["","123"]
bij de vierde is geen repeterend patroon, dus alleen begin rommel: ["3457342502365349",""]
hoe nu de regex?
wat ik eigenlijk bedacht is het volgende:
code:
1
| 0\.(\d*?)(\d+?)* |
- de eerste * non greedy, omdat ie anders het repeterende patroon ook opeet
- de eerste + ook non greedy, om dezelfde reden
- de tweede * wel greedy om er zoveel mogelijk te pakken
dit levert problemen op, namelijk
- met de + op non greedy pakt ie maar 1 getal, omdat de tweede * matched op repeterende digits, en niet steeds hetzelfde repeterende getal of groep getallen, wat ik dus wil
- de tweede * mag wel 0 keer matchen (geen repeterend blok), maar als ie 1 keer matched heb ik dus ook geen repetitie, maar alleen "begin rommel" (laatste voorbeeld). Alleen wordt het dus doorde tweede * gematched en niet door de eerste omdat de tweede greedy is en de eerste niet. Bij meer dan 1 keer matchen heb ik uiteraard een repetitie
rara, hoe los ik dit nu op?
edit: @hieronder: programming is ook goed, maar het is wel javascript, is dus van belang voor de nauwkeurigheid van getallen en ook niet alle regex modifiers werken.
[ Voor 5% gewijzigd door Verwijderd op 17-11-2006 15:34 ]