Bugünlerde, RegEx ile ardışık harf grubunu (veya kelime) dışlama gereksinimim doğdu.
Bir linkin adresini elde etmek istediğimi ve onu bir başka ara sayfaya yönlendirmek istediğimi varsayalım.
<a href="http://www.mbirgin.com">mbirgin</a>
Yukarıdaki örnekte adresi elde etmek için aşağıdaki deseni uygulayabiliriz:
href="(.*?)"
Ancak aynı zamanda href="javascript:Test()" veya href="#" gibi değerleri barındıran linklere dokunmak istemiyordum.
Bu durumda RegEx ile bazı dışlamalar yapmayı denedim
<a href="([^jav\#].*?)">
Bu, karakter bazında dışlama yapıyordu ve ihtiyacımı karşılamıyordu. j, a, v, # karakterleri ile başlayan tüm değerler dışlanıyordu.
Örneğin <a href="art.htm"> ifadesiyle eşleşmemekteydi.
Oysa benim ihtiyacım olan şey, ardışık karakterleri (javascript ifadesini) dışlamaktır.
Hayli bir uğraş ve arayış sonrasında şu bilgiye ulaştım:
If your condition is that a line should not contain something, use negative lookahead.
^((?!regexp).)*$ matches a complete line that does not match regexp.
Burada, daha önceden bilmediğim sihirli ifade şu idi: (?!regexp)
Sonuç olarak aşağıdaki kullanım ihtiyacımı karşılamaktadır:
href="((?!javascript|\#).*?)"
Bu sayede javascript veya # ifadeleriyle başlayan değerler hariç tutuluyordu.
Yararlanılan Kaynak:
www.regular-expressions.info/completelines.html