Nello spirito di polygenelubricants 'sforzi per fare cose stupide con espressioni regolari, Attualmente sto cercando di ottenere il motore regex .NET da moltiplicare per me.Moltiplicazione con espressioni regolari .NET
Questo ha, naturalmente, nessun valore pratico ed è inteso come un esercizio puramente teorico.
Finora, sono arrivato a questo mostro, che dovrebbe controllare se il numero di 1s moltiplicato per il numero di 2 è uguale al numero di 3 nella stringa.
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);
Sfortunatamente, non funziona, e non riesco a capire perché. L'ho commentato per mostrarti cosa penso che dovrebbe fare il motore, ma potrei essere qui. Esempi di uscita:
regex.IsMatch("123") // true, correct
regex.IsMatch("22") // true, correct
regex.IsMatch("12233") // false, incorrect
regex.IsMatch("11233"); // true, correct
ogni pensiero sono i benvenuti!
Bella analisi, grazie! Vedrò se posso aggiustarlo ... =) – Jens