polygenelubricants 'ifadesinin ruhuyla, düzenli ifadelerle aptalca şeyler yapma, Şu anda benim için çoğaltmak üzere .NET regex motorunu almaya çalışıyorum. Bu, elbette pratik bir değere sahip değildir ve tamamen teorik bir alıştırma olarak kastedilmektedir. Şimdiye kadar, bu canavara ulaştım, bu 1s sayısının 2s ile çarpılmasının dizideki 3s sayısına eşit olup olmadığını kontrol etmelidir..NET düzenli ifadelerle çarpma
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);
Ne yazık ki, çalışmıyor ve neden bir kayıp yaşıyorum. Motorun ne yapması gerektiğini düşündüğümü size anlattım, ama burada olabilirim. çıktı örnekler:
regex.IsMatch("123") // true, correct
regex.IsMatch("22") // true, correct
regex.IsMatch("12233") // false, incorrect
regex.IsMatch("11233"); // true, correct
Herhangi bir düşünce bekliyoruz!
Güzel analiz, teşekkürler! Bunu düzeltip düzeltemeyeceğimi göreceğim ... =) – Jens