Khi triển khai một trình phân tích tập lệnh nhỏ, tôi đã gặp một vấn đề với mẫu mã này - khi chỉ muốn chọn phần giữa và bao gồm câu lệnh "if {}", đó là tham lam và chọn tất cả bao gồm cả dòng cuối cùng. Tôi đoán những gì tôi nên sử dụng là một lookahead tiêu cực.C# RegEx ngăn chặn tham lam phù hợp với cùng một mẫu lặp lại
if [condition1]
{
task1
setparameters{a}
task2
}
if [condition2]
{
task3
}
setparameters{b}
Hiện nay, tôi có:
if\b\s\[.*\]\s\{(\s|.)*\}
Tôi đoán đó là không đơn giản như phá vỡ trên một 'nếu', hoặc, như cái gì khác có thể đến trước đó. Có thể đếm một số bằng nhau của niềng răng mở và đóng? Hoặc là có một số cách kỳ diệu khác mà tôi chỉ có thể chọn một trong những tuyên bố 'nếu'?
Bạn cần tìm hiểu về '?' Và ý nghĩa của nó trong Regex. Khắc phục: 'if \ b \ s \ [. * \] \ S \ {(\ s |.) *? \}' –
Có lẽ tôi nên thêm một chút trình độ chuyên môn nữa là tại sao tôi không làm * không tham lam - có khả năng là một dấu ngoặc đóng} có thể xuất hiện trong vòng lặp. Tôi đã cập nhật bản gốc để hiển thị điều này. –
Ah, sau đó bạn bắt đầu xem xét các nhóm cân bằng. Tôi không biết chúng là gì, vì vậy tôi đã đăng một câu hỏi. Câu trả lời là tuyệt vời. Đọc nó: [Nhóm cân bằng biểu thức chính quy là gì?] (Http://stackoverflow.com/questions/17003799/What-are-regular-expression-balancing-groups) –