Dans l'esprit de polygenelubricants 'efforts pour faire des choses idiotes avec des expressions régulières, J'essaye actuellement de faire multiplier le moteur .ge regex pour moi.Multiplication avec des expressions régulières .NET
Ceci n'a bien sûr aucune valeur pratique et se veut un exercice purement théorique. Jusqu'à présent, je suis arrivé à ce monstre, qui devrait vérifier si le nombre de 1 multiplié par le nombre de 2 est égal au nombre de 3 dans la chaîne.
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);
Malheureusement, cela ne fonctionne pas, et je ne sais pas pourquoi. Je l'ai commenté pour vous montrer ce que je pense que le moteur devrait faire, mais je suis peut-être ici. Exemples de sortie:
regex.IsMatch("123") // true, correct
regex.IsMatch("22") // true, correct
regex.IsMatch("12233") // false, incorrect
regex.IsMatch("11233"); // true, correct
Toute pensée sont les bienvenus!
Belle analyse, merci! Je vais voir si je peux corriger cela ... =) – Jens