RegEx'e (.NET sürümü) en büyüğü yerine en küçük geçerli eşleşmeyi elde etmesini nasıl söyleyebilirim?
RegEx'e (.NET sürümü) en büyüğü yerine en küçük geçerli eşleşmeyi elde etmesini nasıl söyleyebilirim?
Yanıtlar:
.*Veya gibi normal bir ifade için .+, olabildiğince az karakterle eşleşmesi için bir soru işareti ( .*?veya .+?) ekleyin . Bir bölümü isteğe bağlı olarak eşleştirmek için (?:blah)?ancak kesinlikle gerekli olmadıkça eşleşmeden , gibi bir şey kullanın (?:blah){0,1}?. Yinelenen bir eşleşme için (kullanarak {n,}veya {n,m}sözdizimi) mümkün olduğunca az eşleştirmeye çalışmak için bir soru işareti ekleyin (örneğin {3,}?veya {5,7}?).
Normal ifadeli niceleyicilerle ilgili belgeler de yardımcı olabilir.
Açgözlü olmayan operatör ?,. Şöyle:
.*?
Açgözlü olmayan operatör, mümkün olan en kısa eşleşme anlamına gelmez:
abcabk
a.+?k yalnızca son üç işaret yerine tüm dizeyle eşleşir (bu örnekte).
Bunun yerine mümkün olan en küçük eşleşmeyi bulmak istiyorum.
Bu, ' a' için tüm maçlara hala izin vermek için mümkün olan son maçtır k.
Sanırım bunu yapmanın tek yolu aşağıdaki gibi bir ifadeden yararlanmaktır:
a[^a]+?k
cab. Girdiğim ise caaacabve a.*?bararsam, içindeki kısa eşleşme yerine tam dizeyi döndürecektir. Dan geriye doğru nasıl arama yaparım b?
START[^START]*?END(burada START ve END sizin başlangıç ve bitiş karakter normal ifadelerinizdir). Esasen, "aradaki karakterlerin tekrar
abcabkve ilea.+?k, RegEx tüm dizeyle eşleşir.