В духе 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
Приветствуются любые мысли!