Laden...

Regex: Match auf eine Folge von Ziffern bis auf "0"?

Erstellt von Bunnychecker vor 11 Jahren Letzter Beitrag vor 11 Jahren 724 Views
B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren
Regex: Match auf eine Folge von Ziffern bis auf "0"?

Hey.

Ich möchte alle IDs matchen, bis auf die, die als Wert eine "0" haben. Ist das mit Regex möglich oder muss ich per IF-Abfrage rangehen?


string source = "irgendetwas id=012 etwasanderes id=210 nochanders id=0 schluss";

Ich habe versucht lookaheads oder lookbehinds zu verwenden, aber das hat noch nicht so recht funktioniert. Mein bisheriges Pattern:


string pattern = @"id=\d+(?<!0)";

Lässt zwar die "id=0" weg, aber auch die "id=210", da letzte Ziffer eine 0 ist.

Liebe Grüße

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Bunnychecker,

ein negativer Lookahead ist schon das richtige, um bestimmte Werte auszuschließen.

Sofern sichergestellt ist, dass die Ids nicht mit führenden Nullen beginnen, reicht aber schon id=[1-9]\d*.

Mit id=([1-9]\d*|0\d+) würde man sogar führende Nullen zulassen und trotzdem eine einzelne Null nicht matchen.

Ansonsten muss dein Lookahead ausdrücken, was du willst, nämlich keine einzelne Null, also keine 0 nach der etwas anders folgt als eine Ziffer: id=(?!0(\D|$))\d+

herbivore

B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren

Vielen Dank.

Das Erste Pattern ist logisch und müsste eigentlich auch schon reichen.