Im Geiste der polygenelubricants 'Bemühungen, dumme Dinge mit regulären Ausdrücken zu tun, Ich versuche derzeit, die .NET Regex-Engine für mich zu multiplizieren.Multiplikation mit .NET regulären Ausdrücken
Dies hat natürlich keinen praktischen Wert und ist als eine rein theoretische Übung gemeint.
Bis jetzt bin ich bei diesem Monster angekommen, das überprüfen sollte, ob die Anzahl von 1s multipliziert mit der Anzahl von 2s gleich der Anzahl von 3s in der Zeichenfolge ist.
Regex regex = new Regex(
@"
^
(1(?<a>))* # increment a for each 1
(2(?<b>))* # increment b for each 2
(?(a) # if a > 0
(
(?<-a>) # decrement a
(3(?<c-b>))* # match 3's, decrementing b and incrementing c until
# there are no 3's left or b is zero
(?(b)(?!)) # if b != 0, fail
(?<b-c>)* # b = c, c = 0
)
)* # repeat
(?(a)(?!)) # if a != 0, fail
(?(c)(?!)) # if c != 0, fail
$
", RegexOptions.IgnorePatternWhitespace);
Leider funktioniert es nicht, und ich bin ratlos warum. Ich habe es kommentiert, um Ihnen zu zeigen, was ich denke, dass der Motor tun sollte, aber ich kann hier weg sein. Beispiele für Ausgabe:
regex.IsMatch("123") // true, correct
regex.IsMatch("22") // true, correct
regex.IsMatch("12233") // false, incorrect
regex.IsMatch("11233"); // true, correct
Jeder Gedanke sind willkommen!
Schöne Analyse, danke! Ich werde sehen, ob ich das beheben kann ... =) – Jens