/ / Regex-Muster passt zu einem Muster, dem ich nicht folgen kann? - Java, Regex, Übereinstimmung

Regex-Muster passt zu einem Muster, dem ich nicht folgen kann? - Java, Regex, Übereinstimmung

Ich stoße nur auf ein Regex-Muster und seine passenden Muster-Strings, aber ich bin verwirrt über eines der übereinstimmenden Muster

Target: .50 1.50 0.50 10.50 00.50 1.555

Pattern: (0|[1-9]d*).dd

Matches with: (4,7:1.50)(9,12:0.50)(14,18:10.50)(21,24:0.50)(26,29:1.55)

Was ich aus dem Muster ableite, ist zwei Ziffern nach der Dezimalstelle und vor der Dezimalstelle eine Gruppe, in der die erste Ziffer entweder 0 oder irgendeine Ziffer zwischen 1 und 9 ist, gefolgt von einer leeren Zeichenfolge oder einer beliebigen Ziffernfolge ...

Ich denke im letzten Match sollte es 00.50 sein.

Was vermisse ich??

Antworten:

1 für die Antwort № 1

Ich denke im letzten Match sollte es 00.50 sein.

Was vermisse ich??

Nein, dieser Teil deiner Regex (0|[1-9]d*). kann als neu geschrieben werden (0.|[1-9]d*.), so kann es nur akzeptieren

  • ein 0 und .

ODER

  • [1-9]d* und .

Wenn Sie möchten, dass viele Nullen vor dem Punkt verwendet werden

(0+|[1-9]d*).dd
^--one or more zeroes

2 für die Antwort № 2

Ändern Sie einfach Ihr Regex-Muster zu

(00?|[1-9]d*).dd

Wenn Sie entweder eine oder zwei Nullen vor dem Dezimalzeichen zulassen möchten. Der Grund, warum Ihr aktueller Regex nur einen Teil davon erfasst, ist, dass der | sagt entweder eine Null vorher einfangen . oder erfassen Sie eine Zahl beliebiger Länge, die nicht mit einer Null beginnt (weil die Klasse [1-9] schließt es aus).


1 für die Antwort № 3
(0|[1-9]d*).dd

^^

Dein Muster sagt Übereinstimmung 0 or any digit from 1 to 9 and then as many .Das Ergebnis ist korrekt, da Sie keine Anker oder Wortgrenzen zur Verfügung gestellt haben, um partielle Übereinstimmungen zu verhindern

b(0|[1-9]d*).ddb

um nur richtige Übereinstimmungen zu machen.