29Jun

Daha İyi Arama ve Zamandan Tasarruf Etmek İçin Temel Normal İfadeler Nasıl Kullanılır?

click fraud protection

Grep ile arama yaptıysanız veya dosyalarınızı sizin adınıza yeniden adlandıracak programlara bakıysanız, muhtemelen işinizi halletmenin daha kolay bir yolu olup olmadığını merak ettiniz demektir. Neyse ki var, buna buna "normal ifadeler" deniyor.

( XKCD.com'dan Comic)

Normal İfadeler Nedir?

Düzenli ifadeler, çok özel bir biçimde biçimlendirilmiş ifadelerdir ve birçok farklı sonuca gelebilir."Regex" veya "regexp" olarak da bilinirler, öncelikle arama ve dosya adlandırma işlevlerinde kullanılırlar. Bir regex, bir dizi farklı olası çıktılar oluşturmak üzere bir formül gibi kullanılabilir; bunların hepsi aranır. Alternatif olarak, bir regex belirterek dosya gruplarının adlandırılmasını belirleyebilirsiniz ve yazılımınız art arda sonraki istenen çıktıya taşınabilir. Bu şekilde birden çok klasördeki birden çok dosyayı çok kolay ve verimli bir şekilde yeniden adlandırabilirsiniz ve basit bir numaralandırma sisteminin sınırlamalarını aşabilirsiniz.

Düzenli ifadelerin kullanımı özel bir sözdizimine dayandığından, programınız bunları okuma ve ayrıştırma yeteneğine sahip olmalıdır. Windows ve OS X için birçok toplu iş dosyası yeniden adlandırma programı, regexps'i ve çapraz platform arama aracı GREP'i( Yeni Eklentiler Kılavuzu için Bash Komut Dosyamızda değindiğimiz) ve * Nix için Awk komut satırı aracını desteklemektedir. Buna ek olarak, birçok alternatif dosya yöneticisi, başlatıcısı ve arama aracı bunları kullanır ve Perl ve Ruby gibi programlama dillerinde çok önemli bir yere sahiptirler..NET, Java ve Python gibi diğer geliştirme ortamlarının yanı sıra yaklaşmakta olan C ++ 11, düzenli ifadeleri kullanmak için standart kütüphaneler sağlamaktadır. Tahmin edebileceğiniz gibi, bir programa koyduğunuz kod miktarını en aza indirmeye çalışırken gerçekten faydalı olabilirler.

instagram viewer

Kaçış Karakterleri Hakkında Bir Not

Size örneklerle göstermeden önce, bir şeyler işaret etmek istiyoruz. Normal ifadeleri nasıl uygulayacağınızı göstermek için bash kabuğunu ve grep komutunu kullanacağız. Sorun, bazen, grep'e iletilmesi gereken özel karakterleri kullanmak istediğimizdir ve kabuk da kullandığı için bash kabuğu bu karakteri yorumlayacaktır. Bu koşullarda, bu karakterlerden "kaçmayı" sağlamalıyız. Bu, kafa karıştırıcı olabilir, çünkü karakterlerin bu "kaçma" işlemi regexp'lerde de gerçekleşir.Örneğin, bunu grep içine girmek istersek:

\ & lt;

ile değiştirmeniz gerekecek:

\\\ & lt;

Burada her özel karakter bir eğik çizgi alır. Alternatif olarak, tek tırnak işaretleri de kullanabilirsiniz:

'\ & lt;'

Tek tırnak işaretleri bash'ye bunların içindekileri yorumlamamalarını söyler. Bu adımların atılmasını isterken, sizin için gösterebilmemiz için programlarınızın( özellikle GUI tabanlı olanlar) bu ekstra adımları gerektirmemesi gerekir.İşleri basit ve basit tutmak için, gerçek normal ifade size alıntı metin olarak verilir ve komut satırı ekran görüntülerinde kaçış sözdizimini görürsünüz.

Nasıl Genişliyor?

Regexps, terimleri belirten gerçekten özlü bir şekilde bilgisayarınızın bunları birden fazla seçeneğe genişletebilmesidir. Aşağıdaki örneğe bir göz atalım:

tom [0123456789]

Köşeli ayraçlar - [ve] - ayrıştırma altyapısına içinde ne olursa olsun, herhangi bir ONE karakterinin eşleştirilebileceğini söyler. Parantezlerin içindeki her neye bir karakter seti denir.

Öyleyse, büyük bir kayıt listesi vardı ve arama için bu normal ifadeyi kullandıysak, aşağıdaki terimler eşleştirilecekti:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

vb. Bununla birlikte, aşağıdaki liste eşleşmez; sonuçlarınızda da görünmez:

  • domates;regex, "tom" dan sonra herhangi bir harfi hesaba katmıyor
  • Tom;regex büyük / küçük harf duyarlıdır!

Mevcut bir karakter olduğu sürece herhangi bir karakterin mevcut olmasına izin verecek bir nokta( .) Ile aramayı da seçebilirsiniz.

Gördüğünüz gibi,

. tom

ile grepping, sadece "tom" başında olan terimleri ortaya koymadı."Yeşil domates" bile bile içeri girdi, çünkü "tom" öncesi alan bir karakter sayılıyor, ancak "tomF" gibi terimler başında bir karakteri yoktu ve bu nedenle yok sayılıyordu.

Not: Grep'in varsayılan davranışı, bazı bölümler normal ifadenize uyduğunda bir metin satırını döndürmektir. Diğer programlar bunu yapmayabilir ve bunu '-o' bayrağıyla grep'de kapatabilirsiniz.

Ayrıca, burada da olduğu gibi bir boru( |) kullanarak değişimi belirtebilirsiniz:

speciali( s | z) e

Bu, her ikisini de bulacaktır:

  • specialize
  • specialize

grep komutunu kullanırken, özel karakterlerden( ,|, and) ile ters eğik çizgi kullanabilir ve bunun çalışması için çirkin hataları önlemek için '-E' bayrağını kullanmalısınız.

Yukarıda belirttiğimiz gibi, bunun sebebi bash kabuğuna bu karakterleri grep'e iletmesini ve onlarla bir şey yapmamasını söylememizdir.'-E' bayrağı grep'e parantezleri ve boruyu özel karakterler olarak kullanmasını söyler.

Hem köşeli köşeli parantezlerinizin içinde hem de bir kümenin başında bulunan bir şaryo kullanarak hariç tutarak arayabilirsiniz:

tom [^ F | 0-9]

Yine, eğer grep ve bash kullanıyorsanız, kaçmayı unutmayıno boru!

Listede yer alan fakat görünmeyen durumlar şunlardır:

  • tom0
  • tom5
  • tom9
  • tomF

Bu bizim regex'imiz ile eşleşmedi.

Ortamlardan Nasıl Yararlanabilirim?

Genellikle sınırları temel alarak arama yaparız. Bazen sadece bir kelimenin başında, bir kelimenin sonunda veya bir kod satırının sonunda görünen dizeler isteriz. Bu, çapalar dediğimiz şeyi kullanarak kolayca yapılabilir.

Bir ayraç( köşeli parantezlerin dışında) kullanmak, bir çizginin "başlangıcını" belirlemenize izin verir.

^ tom

Bir satırın sonunu aramak için dolar işaretini kullanın.

tom $

Bu durumda, arama dizesinin bağlantıdan önce geldiğini görebilirsiniz.

Ayrıca kelimelerin başında veya sonunda, tüm satırları değil, görünen eşleşmeleri de yapabilirsiniz.

\ & lt; tom

tom \ & gt;

Bu makalenin başındaki notta belirttiğimiz gibi, bu özel karakterlerden kaçmamız gerekecek çünkü bash kullanıyoruz. Alternatif olarak, tek tırnakları da kullanabilirsiniz:

Sonuçlar aynıdır. Tek tırnak kullandığınızdan ve çift tırnak kullanmadığınızdan emin olun.

Diğer Kaynaklar Advanced Regexps

için Sadece burada buzdağının ucunu vurduk. Para birimi işaretçisi tarafından tanımlanan para terimlerini arayabilir ve üç veya daha fazla eşleşen terimden herhangi birini arayabilirsiniz.İşler gerçekten karmaşıklaşabilir. Normal ifadeler hakkında daha fazla bilgi edinmek istiyorsanız, lütfen aşağıdaki kaynaklara göz atın.

  • Zytrax.com, işlerin neden eşleştiğini ve uyuşmadığını gösteren belirli örnekleri içeren birkaç sayfaya sahiptir.
  • Regular-Expressions.info'da ayrıca, daha gelişmiş bir çok şeyin yanı sıra kullanışlı bir referans sayfası olan katil bir rehber var.
  • Gnu.org, regexps'i grep ile kullanmaya adamış bir sayfaya sahiptir.

Ayrıca RegExr adlı ücretsiz bir Flash tabanlı çevrimiçi aracı kullanarak normal ifadelerinizi oluşturup test edebilirsiniz. Yazarken çalışıyor, ücretsiz ve çoğu tarayıcıda kullanılabilir.

Normal ifadeler için favori kullanımınız var mı?Onları kullanan harika bir toplu renamer biliyor musunuz? Belki sadece grev-fu'yu övünmek istiyorsun. Yorum yaparak düşüncelerinize katkıda bulunun!