25 Şubat 2019 Pazartesi

Düzenli İfadeler (Regular Expressions) ile Positive Lookahead

Giriş
Düzenli ifadeye (?=subexpression) şeklinde yazılır. Positive lookahead parantez içinde yazılmasına rağmen düzenli ifadedeki eşlemeye dahil edilmez. Yani non-consuming kabul edilir. Açıklaması şöyle.
Typically, a zero-width positive lookahead assertion is found at the end of a regular expression pattern. It defines a substring that must be found at the end of a string for a match to occur but that should not be included in the match. It is also useful for preventing excessive backtracking.
Örnek
Elimizde şöyle bir kod olsun. Önünde sayı, ardında yine bir sayı olan boşlukları siler.
string test = "Some Words 1 2 3 4";
string result = Regex.Replace(test, @"(?<=\d)\s+(?=\d)", "");
Çıktı olarak şunu alırız.
Some Words 1234
Örnek
Artarak giden 5 tane rakamı yakalamak için şöyle yaparız.
^\d*(?=\d{5}(\d*)$)0?1?2?3?4?5?6?7?8?9?\1$
Açıklaması şöyle.
We can force it to match exactly 5 characters by combining a look-ahead of five digits and an arbitrary suffix (which we capture) and a backreference \1 (which must exactly the suffix matched by the look-ahead, ensuring we've now walked ahead 5 characters in the string).
Örnek
Belli bir kelimeye kadar olan grubu yakalamak için şöyle yaparız.
/^.+?(?=\s*\b(?:was|in|for)\b)/
Elimzde "Once upon a time there was a fox in a hole";  olsun
Souç olarak şunu alırız
"Once upon a time there"

Hiç yorum yok:

Yorum Gönder