Küçük bir betik ayrıştırıcısının uygulanmasında, bu örnek kodla ilgili bir problemle karşılaştım - sadece "if {}" ifadeleriyle arasındaki ve sadece "if {}" deyimleri dahil olmak üzere bir bölüm seçmek isteyenler açgözlü olmak ve son satırı da dahil olmak üzere hepsini seçmek. Sanırım kullanmam gereken olumsuz bir bakış.C# RegEx, aynı desenle açgözlü eşleşmeyi önledi
if [condition1]
{
task1
setparameters{a}
task2
}
if [condition2]
{
task3
}
setparameters{b}
Şu anda, var:
if\b\s\[.*\]\s\{(\s|.)*\}
Ben 'eğer' Başka ya bir şey olarak başka daha önce gelebilir üzerinde kırma kadar basit değilmiş. Eşit sayıda açılış ve kapanış parantezleri saymak mümkün mü? Ya da bu 'if' ifadelerinden birini seçebileceğim başka bir büyülü yol var mı?
Regex'te '?' Ve önemini öğrenmelisiniz. Düzeltme: 'if \ b \ s \ [. * \] \ S \ {(\ s |.) *? \}' –
Belki de neden yapmadığımı biraz daha fazla nitelendirmeliydim * açgözlü olmayan - döngü içinde bir kapanış ayracı} görünebilir. Bunu göstermek için orijinali güncelledim. –
Ah, o zaman dengeleme gruplarına bakmaya başlıyorsunuz. Ne olduklarını bilmiyordum, bu yüzden bir soru yayınladım. Cevap harika. Okuyun: [Normal İfade Dengeleme Grupları nedir?] (Http://stackoverflow.com/questions/17003799/What-are-regular-expression-balancing-groups) –