Volgens formele talen en automaten zoek je dan zoiets als:
(a*b+a*)+
Waarbij a een spatie betreft, en b alle karakters op een spatie na. Er staat dan in feite dat a nul of meer keer voor mag komen (kleene star) en b moet minstens 1 keer voorkomen; hetgeen wat je wil. Op deze wijze kunnen er namelijk nooit alleen spaties staan, dat volgt uit b die 1 of meer keer moet voorkomen. In Java zou je regex zoiets worden als: ([ ]*[^ ]+[ ]*)+ Let wel op. Deze regex vangt namen als:
code:
1
2
3
4
| " Sjaak "
" Sjaak Trekhaak "
"Sjaak "
" Sjaak" |
etc...
De eerste / laatsta a* is dan in zekere zin dubbelop. Verwijder je b.v. de laatste a*, dan krijg je:
(a*b+)+ die dan matches heeft als:
code:
1
2
| " Sjaak"
" Sjaak Trekhaak" |
Maar niet langer meer
In java zou je dan zoiets hebben als ([ ]*[^ ]+)+.
Je kan dan namen ook als volgt opvangen:
b+(a*b+)*
Dit dwingt dan af dat je begint met een karakter die niet een spatie is, vervolgens heb je een group die 0 of meer spaties mag bevatten, om vervolgens weer een karakter moet hebben die niet een spatie betreft. Deze group moet dan 0 of meer keer voorkomen. Je kan natuurlijk hierbij a ook veranderen naar a{1} of a?, indien je echt maar 1 (of in het laatste geval 1 of geen) spatie wil hebben.
Je regexp wordt iig dan zoiets als:
[^ ]+([ ]*[^ ]+)*
En zal matches hebben als:
code:
1
2
3
| "Sjaak"
"Sjaak Trekhaak"
"Sjaak Trekhaak" |
Maar niet langer
code:
1
| " Sjaak Trekhaak " etc... |
De regexp van WormLord zal w.s. ook uitkomst bieden, alhoewel ik de + nog nooit voor een group heb gezien

Misschien doet het exact hetzelfde
[
Voor 85% gewijzigd door
prototype op 18-07-2006 14:26
]