
Ich habe ein Problem damit, eine Lösung für eine Situation zu finden. Ich habe diesen regulären Ausdruck, der einer bestimmten Ziffernfolge entspricht:
(102030)\d{10}
Wenn ich dies als Testdaten verwende, erhalte ich die folgenden Übereinstimmungen:
75277887243040354513001
55345377243014107206375
810203087654135168 <- Match
1102030698798798477 <- Match
71020307248040361799581 <- Match
Ich versuche, Fälle zu ignorieren, in denen die Zeichenfolge 23 Ziffern enthält. Ist das nur mit regulären Ausdrücken möglich? Ich habe es mit negativem Look-Ahead versucht, aber es ist mir nicht gelungen.
Antwort1
Um nach vorne zu schauen, brauchen Sie etwas davor - also beginnen wir mit
\d
Dann durch Negativ vor den nächsten 22 Ziffern:
(?!\d{22})
Wir filtern alle Zeilen mit 23 Ziffern heraus. Dann folgt möglicherweise Ihre ursprüngliche Zeichenfolge
(102030)\d{10}
Der vollständige reguläre Ausdruck lautet also
\d(?!\d{22})(102030)\d{10}
Das Ergebnis finden Sie unterregex101.com:
Antwort2
\b(?!\d{23}\b)\d*((102030)\d{10})\d*\b
Dadurch wird die Übereinstimmung in ihrer ersten Untergruppe erfasst.