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 caaacab
ve a.*?b
ararsam, 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
abcabk
ve ilea.+?k
, RegEx tüm dizeyle eşleşir.