Dieser Ausdruck hat einige fortgeschrittene Sachen drin. zuerst, die einfachste: \d{3}
bedeutet genau drei Ziffern. Das sind deine Tausende.
dann: ++
ist eine Variante von + (was bedeutet, ein oder mehrere), aber besitzergreifend, was bedeutet, dass es alle Tausende essen wird. Ich bin mir nicht ganz sicher, warum das notwendig ist.
?:
bedeutet, es ist eine nicht einfangende Gruppe - ich denke, das ist nur aus Leistungsgründen da und konnte weggelassen werden.
ist ein positiver Lookahead - ich denke, das bedeutet, es wird nur geprüft, ob diese Gruppe existiert, aber nicht auf die übereinstimmende Zeichenfolge zählen - was bedeutet, dass sie nicht ersetzt wird.
?!
ist ein negativer Look-Ahead - ich nicht ganz verstehen, aber ich glaube, es heißt, es muss NICHT Spiel, was wiederum bedeutet, dass es nicht eine andere Ziffer am Ende der ausgeglichenen Sequenz sein kann. Dies stellt sicher, dass die erste Gruppe die richtigen Ziffern erhält. Z.B. 10000 kann nur als 10 (000) aber nicht als 1 (000) 0 gefunden werden, wenn Sie sehen, was ich meine.
Durch die Lookaheads, wenn ich es richtig verstehe (ich habe es nicht getestet), nur die erste Gruppe würde tatsächlich ersetzt werden, da es das ist, das übereinstimmt.
Nein, das zweite '+' ist nicht redundant; es macht das erste '+' [Possessiv] (http://www.regular-expressions.info/possessive.html). –
vielen Dank - das hat geholfen! – dotwin
experimentieren mit "++" vs. "+" zeigt keine Auswirkungen auf das Ergebnis, egal was ich hinter meine ganze Zahl (in Java) gesetzt habe. also ich denke, es ist wirklich nur eine Frage der Leistung. – dotwin