Theo tinh thần của polygenelubricants 'nỗ lực để làm những điều ngớ ngẩn với cụm từ thông dụng, Tôi hiện đang cố gắng lấy công cụ .NET regex để nhân cho tôi.Phép nhân với các biểu thức chính quy .NET
Điều này có, tất nhiên, không có giá trị thực tiễn và có nghĩa là một bài tập hoàn toàn lý thuyết.
Cho đến nay, tôi đã đến con quái vật này, nên kiểm tra xem số lượng 1s nhân với số 2 bằng bằng số 3 trong chuỗi.
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);
Thật không may, nó không hoạt động và tôi không biết tại sao. Tôi nhận xét nó để cho bạn thấy những gì tôi nghĩ rằng động cơ nên làm, nhưng tôi có thể ra khỏi đây. Ví dụ về đầu ra:
regex.IsMatch("123") // true, correct
regex.IsMatch("22") // true, correct
regex.IsMatch("12233") // false, incorrect
regex.IsMatch("11233"); // true, correct
Mọi ý tưởng đều được hoan nghênh!
Phân tích tốt, cảm ơn! Tôi sẽ xem nếu tôi có thể sửa chữa điều đó ... =) – Jens