Das Muster, das Sie nur mit sind Spiele eine Ziffer eine Zeit:
\d match a digit [0-9]
? matches between zero and one time (greedy)
Da Sie mehr als eine Ziffer haben sie einzeln auf beide aufgeteilt los ist. Sie können ganz einfach mehr als ein paar verschiedene Möglichkeiten, zu einem Zeitpunkt mehr als eine Ziffer entsprechen, sind hier ein paar:
\d match a digit [0-9]
+? matches between one and unlimited times (lazy)
Oder Sie könnten nur tun:
\d match a digit [0-9]
+ matches between one and unlimited times (greedy)
Welche wahrscheinlich wäre es, die am nächsten was ich denke, dass Sie wollen, obwohl es unklar ist.
Erläuterung:
Seit dem Token \d
wird mit dem ?
quantifier die Regex-Engine Ihre Split-Funktion sagt eine Ziffer zwischen Null und Eins Zeit anzupassen. Das muss alle Ihre Zeichen (Null) sowie jede übereinstimmende Ziffer (einmal) enthalten.
Youbild kann es so etwas wie diese:
a,1,2,i,j // each character represents (zero) and is split
| |
a, , ,i,j // digit 1 and 2 are each matched (once)
Digit 1 und 2 wurden aufeinander abgestimmt, aber nicht gefangen - so sind sie geworfen, bleibt jedoch das Komma noch von der Split und ist nicht grundsätzlich entfernt zwei leere Saiten erzeugen.
Wenn Sie speziell gesuchten Ihr Ergebnis haben, wie a, ,i,j
dann werde ich Ihnen einen Tipp geben. Sie wollen (
erfassen die \d
igits als eine Gruppe zwischen einem und unbegrenzte Male +)
gefolgt von der gierigen Qualifier ?
. Ich empfehle Ihnen, eine der beliebten Regex-Seiten zu besuchen, auf der Sie mit Mustern und Quantifizierern experimentieren können. Es ist auch eine gute Art zu lernen und kann Ihnen viel beibringen!
↳ The solution can be found here
Ja, '?' Ist gierig, aber nur bis zu 1 Zeichen. Das passiert also zweimal und du brauchst 2. Das ist ziemlich standardisiert. – Obicere
@Obicere, die Verwendung von zwei "?" Würde so oft wie möglich mit der Übereinstimmung zwischen null und einmal gleichsetzen. –
Was willst du * das Ausgabe-Array? – Bohemian