Умножение с использованием регулярных выражений .NET

В духе polygenelubricants 'попытки делать глупости с помощью регулярных выражений, В настоящее время я пытаюсь заставить механизм регулярных выражений .NET размножаться для меня.

Это, конечно, не имеет практического значения и предназначено как чисто теоретическое упражнение.

Пока что я пришел к этому монстру, это должно проверить, равно ли количество единиц, умноженных на количество двоек, количеству троек в строке.

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);

К сожалению, это не работает, и я не понимаю, почему. Я прокомментировал это, чтобы показать вам, что, по моему мнению, должен делать движок, но я могу быть здесь. Примеры вывода:

regex.IsMatch("123") // true, correct
regex.IsMatch("22") // true, correct
regex.IsMatch("12233") // false, incorrect
regex.IsMatch("11233"); // true, correct

Приветствуются любые мысли!

7
задан Community 23 May 2017 в 12:24
поделиться