Download CV

REGULAR EXPRESSİONS(REGEX) NEDİR?

Aralık 21, 2021

Regular Expressions(düzenli ifadeler; kısacası regex ya da regexp) yazılımcıların kullandığı fazlasıyla önemli bir o kadarda güçlü, yaygın bir yapıdır. Bu yapıyı neredeyse bütün modern programlama dillerinde kullanabilirsiniz. Herhangi bir metni eşleştirmenize, bulmanıza ya da yönetmenize yardımcı olacak desenler yaratmanıza izin veren birçok karakter ve sembollerin bir araya gelmesiyle oluşan metin dizesidir. Örnek olarak şemada 24 saatlik zaman formatının yol haritası var. Bu yol haritasının regexteki yazımı ise;

/^([01]?[0–9]|2[0–3]):[0–5][0–9]$/

Aşağıda Regex’in mantığını daha iyi anlamamız bir komutun görsel hali mevcuttur. Sizde istediğiniz bir komutun böyle harita şeklinde görünmesini isterseniz. https://regexper.com/#%5Cn sitesine yazarak görebilirsiniz.

NEDEN REGEX ÖĞRENMELİYİZ?

  • Tekrar tekrar aynı şeyleri yazmamak kısacası tekrara düşmemek için.
  • Topluca değiştirmek istediğimiz dizi ya da dosya adları için
  • Karmaşık bir veriyi büyük bir alanda daha hızlı bulmak için.
  • Kullanılan platforma istenilen diziyi bulmak ya da düzeltmek için.
  • Veri tabanında istenilen veriyi bulmak için.
  • Kullanıcının giriş yapıp yapmadığını kontrol etmek için.
  • Verilerin amacına uygun hizmet etmesi ve kodların anlaşıla bilirliği için.
  • Daha kolay, hızlı ve düzenli kod yazmamız için.

REGEX NASIL ÇALIŞIR?

İşlemi başlatmak için önce aranan dize regexin özel karakterlerinden oluşan bir yapıya atanır. Bu işlemin ardından bu dizinin eşleştiği yapı ile geri döner. Bu işlem 2 farklı amaç için yapılır. İstenilen yapıyı bulmak (Search) ya da yer değişikliği yapmak (Replace).

REGEX META KARAKTERLER(ESCAPED CHARACTERS)

Aşağıdaki karakterlerin işlevlerini regex101.com sitesini kullanarak deneyebilirsiniz. Birden fazla karakteri kullanarak kendi isteğinize göre şekillendirebilirsiniz.

[abc]

Parantezin içine yazılan a,b ve c harfleriyle eşleşir buraya istediğiniz harfi yazabilirsiniz.(Sayı da yazabilirsiniz)

[^abc]

Parantezin içinde hangi harfler ya da sayılar yazıldıysa onun haricindeki harflerle ya da sayılarla eşleşir.

[a-z]

Parantezin içindeki karakterlerin dâhil olduğu ve arasındaki tüm karakterleri alır.(Burada a dan z ye kadar olan harfleri alır. Resimdeki göründüğü gibi büyük harfleri ve Türkçe karakterleri almaz)

[a-zA-Z]

Küçük a dan büyük A ya kadar olan Türkçe karakter harici bütün karakterleri almamızı sağlar.

“.”

Newline dışındaki bütün karakterleri (boşluklar dâhil) almamızı sağlar.

“\S”

Boşlukları almamızı sağlar.

”\S”

Büyük S bize bütün karakterleri verir sadece boşluk ne bırakılan satırları vermez.

“\d”

Bize bütün rakamları verir. [0–9]

“\D”

Rakamlar dışındaki bütün karakterleri verir. (boşluk, Tab dâhil)

“\w”

Bütün rakamları ve harfleri verir [a-zA-Z0–9_] ile aynı anlama gelir tek fark \w Türkçe karakterleri de alıyor [a-zA-Z0–9_] Türkçe karakterleri almıyor. Resimde göründüğü gibi rakam ve sayı dışındaki karakterleri almaz.

“\W”

Harfler ve sayılar hariç onun dışındaki bütün karakterleri veriyor.(“\w” tam tersi)

“\v”

Yeni satırları ve dikey sekmeleri verir. Unicode ile çalışıyor. CMD/CTRL +ENTER kullanarak bazı kelime işlemcilerinde dikey sekmeler ekleyebilirsiniz. Çok fazla kullanılan bir komut değildir.

“\n”

Geri dönüş olarak adlandırılır, önceki parantez kümesinde çekilen metnin tekrarıyla eşleşir. Belirsizliği azaltmak için ‘\ gn’ veya n bir sayıysa ‘\g{n}’ kullanabilirsiniz.

“\ddd”

Sekiz bit olan karakterleri atanan sekizlik değerlerle eşitler ve bize verir. Tablodan bakıp almak istediğiniz karakterin kodunu ddd yerine yazın.(Buradaki Octal Character Table dan yardım alabilirsiniz) https://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=oct

“[\b]”

Geri silme kontrol karakteriyle çalışır.(backspace)

“ \”

Bu karakter bir meta karakterin ya da sınırlayıcının gerçek değerini almamızı sağlıyor.

“(a|b)”

Alt ifadelerin a veya b kısmı ile eşleşir ve bize orayı gösterir. Kullanımı çok yaygın değildir.

“(?…)”

Bu yapı (…) ya çok benzer fakat onun yaptığı gibi herhangi bir şeyi bize vermez. Aynı görevde kullanılmaz.

“(?#…)”

Bu grupta görünen herhangi bir metin regex’te yok sayılabilir. Başka bir seçenek de x bayrağının #comments’a izin vermesini sağlamak. Bu bayrak aynı zamanda regex’in boşlukları görmezden gelmesine neden olur.

“(?P<name>…)”

Bu komut ile yakalama grubuna numara yerine verilen adı kullanarak yakalayabiliriz. Alternatif metotlar şunlardır ; (?<name>…) ve (?’name’…) PCRE kullanırken bu metotları da kullanabilirsiniz.

“(?imsxXU)”

Bu ifade, ifadenin içindeki regex bayraklarının ayarlanmasını sağlar. Bayrakları eksi işaret kullanarakta ayarlayabilirsiniz.(?-i)

“(?(1)yes|no)”

Bu komut sayesinde yakalama gurubunun ilk soldakiyle eşleşmeye çalışır. Eğer soldakiyle eşleşmezse sağdakiyle eşleşir. Genellikle kullanılır. (True and False)

“(?P=name)”

Bu komut python’a özel bir komuttur. Önceden belirtilmiş bir yakalama grubuyla eşleşen metni yakalar. Diğer komutlarla birleştirildiğinde oldukça kullanışlı bir hal alabilir. Aşağıdaki resimde diğer komutlarla birleşmiş hali mevcut.

“(?=. . . )”

Komut böyle olsa da kullanımı genellikle(. . .(?=. . .) ) şeklindedir. Bu komut verilen alt yolun karakter kullanmadan eşleştirilebileceğini söyler. Örnek kullanımı (mal(?=ware)) şeklinde olabilir.

“(?! . . .)”

İfadedeki geçerli pozisyondan başlayarak verilen desenin eşleşmemesini sağlar. Karakter tüketmez. (?=. . .) komutunun tersi de diyebiliriz.

“(?<=. . .)”

Komut böyle olsa da genellikle kullanımı (?<=mal)ware şeklindedir. Bu metot ile belirtilen kalıbın, ifadedeki geçerli konumda biten yeri verir. Desen sabit bir genişlikte olmalıdır. Herhangi bir karakter tüketmez.

“(?<! . . .)”

Belirtilen kalıbın, ifadedeki geçerli konumda biten eşleşmesini sağlar. Desen sabit bir genişliğe sahip olmalıdır. Burada da genel kullanımı (?<!not)mac gibi kullanılabilir.

“a?”

A yerine yazdığınız herhangi bir karakterle eşleşir ya da eşleşmez.

“a+”

A yerine yazdığımız herhangi bir karakterle bir veya birden fazla kez yazılmış ardışık karakterlerle eşleşir.

”a{3}”

Bu kalıbın anlatmak istediği şey. Parantezin solunda kalan karakterden ardışık olarak kaç tane olduğunu söyler. Parantezin içindeki sayı bize ardışık kaç tane karakterin olduğunu söyler.

“a{3, }”

Bu kalıp aslında 4.29’daki kalıba benziyor fakat burada parantez işine yazdığınız sayı en az o kadar olduğunu işaret ediyor. Burada örnek olarak 3 verilmiş 3 ve 3’ten fazla ardışık yazılı ‘a’ları almamızı sağlar.

(Kalıbın başında ve sonunda kullanılan karakterler buradaki kalıp ile bir alakası yoktur. Sistemde böyle algılanıyor.)

Siz virgülden sonrasını da doldurursanız bu durumda doldurduğunuz sayılar dâhil olmak üzere (3,6) o kadar kez tekrar etmiş olan karakteri döndürür.

“ ^ “

Her hangi bir karakter tüketmeden dizenin başlangıcını eşleştirir. Çok satırlı metinlerde ya da yapılarda, yeni satır karakterlerinden sonra eşleşir.(\A) komutuyla aynı görevi yapar.

“ $ “

Her hangi bir karakter tüketmeden dizenin sonunu eşleştirir. Çok satırlı yapılarda, yeni satır karakterlerinden sonra eşleşir. Kısacası dizenin sonunu verir.(\Z) komutuyla aynı görevi yapar.

“g“

Motora, ilk eşleşme bulunduktan sonra durmamasını, daha fazla eşleşme bulmayana kadar devam etmesini söyler.

“m”

Bu komut aslında iki komutun birleşimi gibidir. Satır başını gösteren(^) ile satır sonunu gösteren ($) komutların birleşimidir. Sırayla her satırın başından sonuna kadar eşleşmesini sağlar. Bütün satırı almamızı sağlar

“\0“

Regex ‘ in tam eşleşme sonucunu içeren bir dize döndürür.

“$1”

Bu komut ilk yakalama grubundaki içeriğe sahip bir dize döndürür. Bu durumda 1 sayısı, geçerli bir yakalama grubuna karşılık geldiği sürece herhangi bir sayı olabilir.

“\t”

Bu komut bir tane sekme karakteri ekler.

“\x20 “

Standart sözdizimini kullanarak değiştirme dizgisine herhangi bir karakter eklemek için onaltılık öğeleri kullanabilirsiniz.

REGEX ÖRNEKLERİ

Tarih Formatı Örneği

/^(0?[1–9]|[12][0–9]|3[01])([ \/\-])(0?[1–9]|1[012])\2([0–9][0–9][0–9][0–9])(([ -])([0–1]?[0–9]|2[0–3]):[0–5]?[0–9]:[0–5]?[0–9])?$/

Bu komut ile (dd/mm/yyyy) şeklinde bir tarih döndürebilirsiniz.

Saatlik Zaman Formatı

/^([01]?[0–9]|2[0–3]):[0–5][0–9]$/

Bu komut ile saat şeklinde verilen yapılara çok kolayca erişebilir ve döndürebilirsiniz.

IP Adres Formatı

^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$

Bu komut ile (123.123.123.123) şeklindeki 254 e kadar olan IP adreslerini eşleştirip döndürebilirsiniz.

Domain Adresi Formatı

^(?:[a-z0–9](?:[a-z0–9-]{0,61}[a-z0–9])?\.)+[a-z0–9][a-z0–9-]{0,61}[a-z0–9]$

Bu komut ile (xxxxxxxx.com) şeklindeki domain namelerle eşleşmemizi ve döndürmemizi sağlıyor.

Posted in Software
Write a comment