Düzenli ifadeler, yaygın olarak Regex olarak bilinir, yazılım geliştirme, sistem yönetimi ve büyük miktarda metnin işlenmesi dünyasında en güçlü ve çok yönlü kaynaklardan birini temsil eder. Ancak, ilk kez yaklaşan birçok kullanıcı ve programcı için sözdizimi anlaşılmaz hatta bunaltıcı olabilir. Regex kuralları ve desenlerinde ustalaşmak, metni benzersiz bir verimlilik ve esneklikle aramayı, filtrelemeyi, doğrulamayı ve dönüştürmeyi sağlar.
BT projelerinizde belgeler içindeki karmaşık desenleri nasıl bulabileceğinizi, formları nasıl doğrulayabileceğinizi, verileri nasıl dönüştürebileceğinizi veya arama süreçlerini nasıl otomatikleştirebileceğinizi hiç merak ettiniz mi? İster geliştirici, ister sistem yöneticisi, ister sadece meraklı bir kullanıcı olun, bu makale tam size göre. Regex kuralları ve her türlü bağlamdaki uygulamalarına dair eksiksiz, pratik ve her şeyden önce açık bir rehbere hazır olun.
Regex kuralları veya düzenli ifadeler nelerdir?
Düzenli ifadeler (Regex, İngilizce kısaltması) Düzenli İfade) diğer metinler içindeki metinleri bulma, doğrulama veya değiştirme kurallarını tanımlayabilen karakter dizileri veya desenleridir. Belirli ifadeleri, belirli biçimleri (e-postalar, tarihler, telefon numaraları gibi), belirli ölçütleri karşılayan adları aradığınızı veya metnin bölümlerini toplu olarak değiştirmek istediğinizi düşünün: tüm bu durumlarda, Regex ideal bir araçtır.
Temel fikir şudur Yerini belirlemek, doğrulamak veya değiştirmek istediğimiz metnin uyması gereken örüntüyü bir dizi sembol, harf ve özel operatörle tanımlayın.Örneğin, bir cümledeki tüm sayıları bulmak istiyorsanız, "herhangi bir sayısal karakter" diyen basit bir desen tanımlayabilirsiniz (örneğin \d). Daha gelişmiş bir şey istiyorsanız, şu kadar karmaşık kurallar oluşturabilirsiniz: "'Kopyala' ile başlayan ve bir sayıyla biten tüm dizeler."
Regex'in tarihi ve evrimi
Düzenli ifadeler 20. yüzyılın ortalarında, biçimsel mantık ve otomatlar teorisi alanında doğmuştur. İlk pratik kullanımı UNIX tabanlı sistemlerde, aşağıdaki gibi yardımcı programlarla olmuştur: ed, grep, susuzluk y awkDaha sonra standart POSIX sözdizimini genişletti ve onu birçok ortama dahil etti. Daha sonra dil Perl Regex'i yeni bir seviyeye taşıyarak yeni özellikler ekledi ve bunları geliştirici topluluğu arasında popüler hale getirdi.
Şimdiki zamanda, Regex çoğu programlama dilinde yerleşiktir (JavaScript, Python, Java, C#, PHP, Ruby, vb.) ve gelişmiş metin düzenleyiciler, işletim sistemleri, web çerçeveleri ve birden fazla komut satırı yardımcı programı. Bu, Regex kurallarını herhangi bir bilgi işlem bağlamında metin işleme için gerçekten evrensel bir dil haline getirir.
Regex kuralları ne işe yarar?
W Regex kuralları Bunlar sadece arama yapmak için kullanılmaz, aynı zamanda büyük miktardaki verileri saniyeler içinde doğrulamanızı, ayıklamanızı, dönüştürmenizi ve filtrelemenizi veya değiştirmenizi sağlar.
- Büyük metinlerde örüntü bulma: E-postaları, URL'leri, adları, numaraları, tarihleri ve daha fazlasını, hatta büyük dosyalarda veya veritabanlarında bile, manuel çaba harcamadan bulun.
- Kullanıcı girdisini doğrula: Bir parolanın gereksinimleri karşılayıp karşılamadığını, bir telefon numarasının veya bir e-posta adresinin doğru olup olmadığını depolamadan önce kontrol eder.
- Metni değiştir ve değiştir: Metnin belirli bölümlerini değiştirin; HTML etiketlerini kaldırmaktan veri biçimlerini normalleştirmeye kadar.
- Süreçleri otomatikleştirin: Günlükleri filtreleyin, listeleri dönüştürün, günlük dosyalarını analiz edin veya dosyaları çok kesin kurallara göre toplu olarak yeniden adlandırın.
Regex Temelleri: Temel Kavramlar
Regex kuralları, gerçek karakterler ve meta karakterlerin birleşiminden oluşur. Bu öğeleri anlamak, yararlı kalıplar oluşturmanın temelidir.
1. Gerçek karakterler
Kelimenin tam anlamıyla bir karakter, aramak istediğiniz karakteri tam olarak temsil eder. Örneğin, ifade ev Hedef metinde tam olarak o diziyi, o sırayla bulacaktır.
2. Meta karakterler: Regex'in gücü
Metakarakterler, düzenli ifadelerin anlamını genişleten, onlara çok yönlülük ve güç kazandıran özel sembollerdir. En yaygın olanları şunlardır:
- . Nokta, satır sonu hariç herhangi bir karakteri temsil eder.
- [] Parantezler izin verilen karakter sınıflarını veya kümelerini tanımlar.
- ^ Çevre eki bir satırın/kelimenin başlangıcını veya parantez içine alındığında bir kümenin olumsuzluğunu işaret edebilir.
- $ Dolar simgesi bir satırın veya metnin sonunu belirtir.
- * Yıldız işareti, önceki öğenin “sıfır veya daha fazla tekrarını” aramanıza olanak tanır.
- + Artı işareti "bir veya daha fazla tekrar"ı arar.
- ? Önceki öğenin isteğe bağlı (sıfır veya bir kez) olduğunu belirtir.
- () Parantezler, niceleyicileri uygulamak, alt grupları çıkarmak veya alternatifleri tanımlamak için bir ifadenin parçalarını gruplandırır.
- | Dikey çubuk mantıksal bir alternatif olan "veya"yı temsil eder.
- \ Ters eğik çizgi, takip eden karakterin özel anlamından kaçar veya kısaltılmış diziler (örneğin) sunar \d, \w, \s).
3. Niceleyiciler: Tekrarı kontrol etme
Miktar belirteçleri, bir karakterin, sınıfın veya grubun kaç kez tekrarlanacağını tanımlamanıza olanak tanır:
- *: Sıfır veya daha fazla tekrar.
- +: Bir veya daha fazla kez.
- ?: Bir kez veya hiç (isteğe bağlı).
- {olumsuzluk}: Kesinlikle n tekrarlar.
- {N,}: En azından n zamanlar (maksimum sayı yok).
- {n,m}: Arasında n y m tekrarlar.
4. Karakter sınıfları ve kısaltmalar
Karakter sınıfları, aramak istediğimiz şeyi daha da daraltmamıza olanak tanır:
- [az]: herhangi bir küçük harf.
- [AZ]: büyük harf.
- [0-9]: herhangi bir rakam.
- [ABC]: a, b veya c harfi.
- [^xyz]: herhangi bir karakter dışında x, ben z.
- \d: ondalık basamak ([0-9]'a eşdeğer).
- \D: herhangi bir karakter yok hayır bir rakam olmak.
- \w: kelime karakteri (harf, rakam veya alt çizgi; [a-zA-Z0-9_] ile eşdeğer).
- \W: herhangi bir sözcük olmayan karakter.
- \s: boşluk (boşluk, sekme, satır sonu).
- \S: boşluktan başka herhangi bir karakter.
5. Bağlantılar: Deseni metnin içine yerleştirme
Çapalar, desenleri bir satırın başına veya sonuna ya da kelimelerin başına/sonuna yerleştirmenize olanak tanır.
- ^: satırın veya metnin başlangıcı.
- $: satır veya metnin sonu.
- \b: kelime sınırı (başlangıç veya bitiş).
- \B:sözcük olmayan sınır noktası (iç).
Regex kurallarının pratik örnekleri
Şimdi bu kuralların hem basit hem de ileri düzeydeki gerçek yaşam senaryolarına nasıl uygulanabileceğine bakalım, böylece öğrendiklerinizi hızla pratiğe dökebilirsiniz.
- E-postaları doğrula: ^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,6})+$
- DNI numaralarını bulun: \b\d{8}[- ]?[trwagmyfpdxbnjzsqvhlcke]?\b
- IP v4 adreslerini algıla: ^(?:(?:25[0-5]|2[0-4]\d|1?\d?\d)(?:\.(?!$)|$)){4}$
- HTML etiketlerinden URL'leri çıkarın:
- Java'da yorum satırlarını algılama: //[^\r\n]*[\r\n]
Gelişmiş mantık ve desen özelleştirme
Regex, grupları, değişimleri, referansları ve gelişmiş niceleyicileri birleştirerek karmaşık desenler oluşturmanıza olanak tanır ve çok özel bilgileri filtrelemenize, doğrulamanıza veya bulmanıza olanak tanır.
Gruplar ve dernekler
Desenin bir kısmını parantez içine alarak bir grup oluştururuz. Bu, niceleyicileri tüm gruplara uygulamamızı, bilgi çıkarmamızı veya alt desenlere başvurmamızı sağlar.
Örneğin, ( ifadesi(anne)+b) “mab” veya “mamab” ile eşleşecektir, ancak “maab” ile eşleşmeyecektir. Gruplara daha sonra şu şekilde başvurulabilir: \1, \2, vb. benzer tekrarlanan desenleri bulmak için idealdir.
Alternatifler (|): Regex'te mantıksal "veya"
Dikey çubuk | alternatifleri tanımlamanıza olanak tanır: bu sembolle ayrılmış desenlerden herhangi biri geçerli olacaktır. Örneğin, (erkek|kız) her iki kelimeyle de eşleşecektir.
\ ile metakarakterlerden kaçın
Ters eğik çizgi \ Metakarakterlerin özel anlamlarını nötrleştirmek veya kısaltılmış diziler kullanmak önemlidir. Örneğin, “\.” harfi noktayı, “\?” işareti soru işaretini, “\\” ters eğik çizginin kendisini vb. arar.
Açgözlü ve tembel niceleyiciler
Varsayılan olarak, Regex niceleyicileri açgözlüdür: mümkün olduğunca çok metin alırlar. ? Gerekli olan en azı yakalayan “tembel” olarak değiştirilir.
Örnek: köpek "perr" ile "o" arasındaki en uzun dizeyi bulacak, köpek minimumu yakalayacaktır.
İddialar ve etrafa bakışlar
İleriye ve geriye bakma doğrulamaları, metinden karakter tüketmeden bir eşleşmeden "önce" veya "sonra" koşulları doğrulamanıza olanak tanır.
- Olumlu geleceğe bakış: (?=desen) Mevcut pozisyondan sonra “desen”in bulunduğunu kontrol edin.
- Olumsuz geleceğe bakış: (?!model) Aşağıda "desen"in mevcut olmadığını kontrol edin.
- Olumlu/Olumsuz geriye bakış: (?<=desen) y (? Aynı şeyi "tersinden" yapıyorlar.
Regex'in gerçek dünyadaki pratik uygulamaları
Regex, çok çeşitli alanlarda ve günlük işlerde kullanılır:
- Form doğrulaması: e-postalar, telefon numaraları, isimler, güçlü şifreler.
- Günlük işleme ve sistem denetimi: Günlük dosyalarında desen arama, hata ve uyarıları çıkarma.
- SEO ve URL yönetimi: .htaccess'te URL yeniden yazma, parametre filtreleri, arama segmentasyonu.
- Toplu metin düzenleme: HTML etiketlerini temizleyin, gereksiz boşlukları kaldırın, elektronik tablolardaki verileri normalleştirin, eski kodu uyarlayın.
- Web geliştirme ve otomasyon: otomatik test, sunucu kuralı yapılandırması, kazıyıcı geliştirme.
Farklı Regex çeşitleri ve motorları
Tüm Regex uygulamaları aynı yetenekleri desteklemez; kullanılan dile, araca veya motora bağlı olarak farklı "çeşitler" vardır.
- POSIX: UNIX tabanlı ilkel sözdizimi. Perl veya PCRE'den daha az kapsamlı.
- Perl/PCRE: Çok kapsamlıdır, etrafa bakmayı, gelişmiş referansları, değiştiricileri ve alt rutinleri destekler.
- JavaScript: Web üzerinde yaygın olarak kullanılır, çoğu operatörle uyumludur, ancak lookbehind'da (modern versiyonlar hariç) sınırlamalar vardır.
- .NET ve diğer diller: Bunlar genellikle PCRE ile uyumludur, ancak her zaman dilin kendi belgelerine başvurmanız önerilir.
Bu nedenle, belirli bir bağlamda çalışmaya gideceğiniz zaman, Regex'in o araçta veya dilde hangi desteği ve söz dizimini kabul ettiğini kontrol edin.
Kendi Regex desenlerinizi nasıl test edebilir ve oluşturabilirsiniz
Regex'i öğrenmenin en iyi yolu örneklerle pratik yapmak ve web üzerinde bulunan canlı test araçlarını kullanmaktır.
- normalex101.com: Desenler yazmanıza, sonuçları kontrol etmenize, açıklamaları ve performans istatistiklerini görüntülemenize olanak tanır.
- regexr.com: : Harika adım adım yardım seçenekleri, görsel grafikler ve etkileşimli örnekler.
- Görsel açıklamalar ve kod üreteçleri: Karmaşık desenleri anlamak ve sıfırdan ifadeler üretmek için idealdir.
- Çevrimiçi oyunlar ve uygulamalar: Regex'in nasıl çalıştığını içselleştirmek için oynayarak öğrenin ve gerçek zorlukları çözün.
Regex'te ustalaşmak için yaygın hatalar ve pratik ipuçları
Regex güçlüdür, ancak kafa karıştırıcı da olabilir. Bu ipuçları yaygın tuzaklardan kaçınmanıza yardımcı olacaktır:
- Kaçış meta karakterleri tam değerini aradığınızda. Örneğin, şunu kullanın \. nokta için, \* yıldız işareti için, \? Sorgulama için.
- Nokta (.) ve joker karakter .*'yi aşırı kullanmayın. Bunlar çok faydalıdır, ancak deseninizi iyi tanımlamazsanız istenmeyen sonuçlar döndürebilirler.
- Deseni bir satırın başına veya sonuna sınırlamak istediğinizde (^, $) bağlantıları ekleyin ve kısmi eşleşmelerden kaçının.
- Belirli niceleyiciler kullanın Tam tekrarları ararken, yalnızca * veya +'ya güvenmek yerine.
- Her zaman olumlu ve olumsuz örneklerle deneyin. Bu şekilde, yanlış pozitif sonuçlar üretmeden, desenin gerekli tüm durumları kapsayıp kapsamadığını tespit edebilirsiniz.
- Böl ve fethet: Eğer çok karmaşık bir deseniniz varsa, onu parçalara ayırıp en sonda parçaları birleştirebilirsiniz.
- Hile sayfalarına, dokümanlara ve forumlara göz atmaktan çekinmeyin. Örnekleri ve günlük püf noktalarını görmek için.
Regex'i programlama dillerine ve araçlarına entegre etme
Regex, tüm büyük dillerin en yaygın işlevlerine entegre edilmiştir. Bazı örnekler:
- JavaScript: Yöntemler Ölçek(), yürüt() RegExp nesnesinin ve yöntemlerinin eşleşme(), arama(), değiştir (), Bölünmüş() Dizenin.
- Piton: Modül re gibi işlevler sağlar arama(), eşleşme(), hepsini bul(), alt(), vb.
- PHP: fonksiyonlar gebelik_eşleşmesi(), preg_replace(), gebelik_bölümü() ve diğerleri
- .AĞ: Clase regex gelişmiş yöntemler ve PCRE desteği ile.
Editörler gibi VSCode, Sublime, Atom veya Notepad++, ayrıca arama ve değiştirme için Regex'i de kullanabilirsiniz. Ve UNIX sistemlerinde, şu gibi yardımcı programlar grep, susuzluk y awk kendi Regex motorunu entegre eder.
SEO ve URL yönetiminde Regex
Regex, WordPress, Joomla ve e-ticaret gibi platformlarda URL optimizasyonu, web yönlendirme ve dinamik parametre yönetimi için önemli bir bileşendir.
- .htaccess ve mod_rewrite: Çirkin, parametre dolu URL'leri Regex kurallarıyla dostça adreslere dönüştürmenize olanak tanırlar. Bu şekilde,
www.ejemplo.com/index.php?p=123
dönüştürülebilirwww.ejemplo.com/articulo/titulo-amigable
Hem SEO'yu hem de kullanıcı deneyimini iyileştiren. - Parametre filtreleme: Sonuçları farklı arama bağlamlarına uyarlamak için URL'deki parametreleri çıkarın, temizleyin veya dönüştürün.
Web yöneticileri, Regex kurallarını kullanarak arama motorları ve kullanıcılar tarafından yapıyı, optimizasyonu ve anlayışı iyileştirmek için URL bileşenlerini tanımlayan ve değiştiren yeniden yazma kalıpları oluşturabilirler.
Gelişmiş Düzenli İfadeler: Teknikler ve Kaynaklar
Regex yalnızca doğrudan aramaları desteklemez; koşullu gruplama, alt rutinler, yineleme, geri referanslar ve çok daha fazlasını destekler. Bu onu karmaşık görevler için olmazsa olmaz bir araç haline getirir.
- Altprogramlar ve geri referanslar: Tekrarlanan desenleri, simetrileri, dizileri ve çok özel doğrulamaları bulmanızı sağlarlar.
- Şartlılar: Önceki gruplarda yakalananlara dayanarak farklı aramalar veya doğrulamalar çalıştırın.
- Özyineleme: Bazı gelişmiş motorlar, XML veya JSON gibi yapılandırılmış verileri işlerken çok kullanışlı olan, kendilerine uygulanan desenleri tanımlamanıza olanak tanır.
- Küresel tanımlayıcılar: (Perl/JavaScript'te /g, /i, /m) genel, büyük/küçük harfe duyarlı olmayan veya çok satırlı aramalara izin verir.
Regex öğrenmek için temel kaynaklar
Bilginizi genişletmek istiyorsanız, bu kaynaklar faydalı olacaktır:
- Vikipedi: Detaylı teorik ve teknik açıklamalar.
- Düzenli-İfadeler.info: Her seviyeye uygun referans ve eğitimler.
- Özetler: En yaygın operatörlerin, grupların ve kuralların kısa özetleri.
- Etkileşimli öğreticiler: Egzersizlerle doğrudan uygulama ve anında geri bildirim.
- Topluluklar ve forumlar: Diğer kullanıcılardan öğrenin, sorular sorun ve kişisel ipuçlarınızı paylaşın.
Regex öğrenmek, metin yönetimi ve işlenmesinde büyük bir avantaj sağlar; daha verimli aramalar, doğrulamalar, dönüştürmeler ve otomasyona olanak tanır. Tutarlılık ve pratik ile regex desenlerini yazmak daha kolay ve doğal hale gelir. Çevrimiçi araçlardan ve pratik alıştırmalardan yararlanın, basit örneklerle başlayın ve daha karmaşık desenlere doğru ilerleyin. İlkelerinde ustalaştığınızda, Regex geliştirme ve sistem yönetimi cephaneliğinize doğal bir katkı olacak ve daha önce karmaşık veya sıkıcı görünebilecek görevleri kolaylaştıracaktır.