Java'da düzenli ifadelerle çalışma

İçindekiler
Günümüz bilgi sistemlerinde arama fonksiyonlarını görmek normaldir, bu fonksiyonların her seferinde işlenmesi gerekir. desenler daha birçok kompleksten. Her bir vakayı özel olarak ele alabilmek için birkaç bin yıl gerekir, bu nedenle aramaların formüle edilmiş bir temsilini oluşturmaya izin veren mekanizmalar geliştirilmiştir.
Bu formüller şurada bulunabilir: düzenli ifadelerBu, metin dizelerini değerlendirmek için kalıplar oluşturmamıza ve söz konusu dize ifade edilen formüle karşılık geliyorsa veya karşılık gelmiyorsa pozitif veya negatif bir değer döndürmemize izin verir.
İçinde Java Normal ifadeleri basit bir şekilde uygulayabiliriz, ancak bu, geliştiricinin sahip olduğu farklı öğeleri öğrenebilmesi için oldukça kapsamlı bir çalışma gerektirir.
Kalıplarımızı belirli bir kod yapısıyla test edebileceğimiz formülleri ifade edebilmemizin yolu, buna şu diyeceğiz: normal ifade sözdizimi.
Sözdizimi bize ne sağlar?Sözdiziminin bize izin verdiği şey, türe göre kalıplar oluşturmaktır. karakter, nicelik, karakter ve niceliklerin birleşimi, belirli bir öğeyle başlar, formülün merkezi ve sonu için bir ifade ayarlar. Bununla, programımızda ihtiyaç duyulabilecek çok özel kalıpları belirleyebilir veya belki de bir metin veya veritabanı üzerinde yapılan aramayı daha uygun bir şekilde filtreleyebiliriz.
Aşağıda, düzenli ifadelerde en çok kullanılan öğelerin küçük bir listesini görelim: Java, bu öğreticide gösterilenlerden çok daha fazla öğe vardır, bu nedenle bilgiyi pekiştirmek için kendi araştırmanızı yapmanız önerilir:
Hattın Başlangıcı\^ Bu eleman ile belirtmeye devam ediyoruz Java hangi normal ifadede bir satır başlatır.
Yolun sonu$ Bu sembol ile satırı bitirdiğimizi belirtiyoruz.
Karakter listesi[] Köşeli parantezlerle, içindeki listelerden herhangi birini araması gerektiğini normal ifadeye belirtiriz.
Hariç tutmak[\^] Listede olmayan herhangi bir karakteri seçmemizi sağlar.
niceleyici{j, k} İçinde ne olduğunu bulun J belirtilen sayıda k; {J,} bu ikinci durumda, içinde ne varsa J bir veya daha fazla kez; nihayet {J} içinde olanın görünmesi gerektiğini gösterir J sadece bir kez.
Kelime karakterleri\ w Ait olduğu karakterleri bulun kelime, ama eğer kullanırsak \ B bunun tersini yapar, ait olmayan karakterleri bulur.
rakamlar\ NS Yalnızca rakamlarla eşleşme yapmamızı sağlar ve kullanırsak \ NS rakam veya sayısal karakter olmayan her şeyi eşleştireceğiz.
boşluklar\ s Sekmeler, boşluk çubuğu gibi boşlukları eşleştirmemizi sağlar, ancak kullanırsak \ S tersini yaparsa, boşluk olmayan her şeyle eşleşir.
Bu birkaç unsurla görebildiğimiz gibi, nispeten karmaşık desenler elde edebileceğimiz çeşitli kombinasyonlar oluşturabiliriz.
Bir denemek istersek normal ifade Bir programı derlemeden önce, kalıpları gerçek zamanlı olarak değerlendirebileceğimiz rubular.com sayfasını kullanabiliriz.

BÜYÜT

Test edeceğimiz basit bir örnek yapacağız. bir e-postayı doğrulamak için normal ifade, aşağıdakileri kullanacağız:
[_ a-z0-9 -] + (\. [_ a-z0-9 -] +) * @ [a-z0-9 -] + (\. [a-z0-9 -] +) * (\ . [az] {2,3}) $

İlk olarak, sayfanın formunun ilk alanına normal ifadeyi girmeliyiz. rubular.com sonra denilen alanda test dizginiz normal ifadenin çalıştığını doğrulamak için farklı e-postaları test edeceğimiz yer burasıdır, geçersiz bir e-posta girdiğimizde doğrulayıcının nasıl davrandığını görelim:

BÜYÜT

Gördüğümüz gibi örnek e-postamızda nokta eksik, bu nedenle geçersiz ve değil eşleşme oluşturmaz Normal ifade ile eksik noktayı yerleştirerek düzelteceğiz ve doğrulayıcı otomatik olarak olumlu bir yanıt üreterek normal ifademizin sorunsuz çalıştığını görmemizi sağlar.

BÜYÜT

Gördüğümüz gibi, bu sadece düzenli ifadeleri kullanmayı öğrenirken çok yararlı bir kaynaktır. Java eğer herhangi bir dilde değilse.
Sözdiziminin temel öğelerinin her birinin ne yaptığını öğrendikten sonra, şimdi nasıl bir yapı oluşturabileceğimizi öğrenmeliyiz. desen aramak içinde Java, bununla düzenli ifadeler kullandığımızda hangi yöntemlerin, sınıfların ve paketlerin devreye girdiğini görebiliriz.
Bilmemiz gereken ilk şey, tüm bu yardımcı programların pakette olduğudur. java.util.regex, bu yüzden bu örnekleri yapmak için bu paketi sınıflarımızın başına eklemeliyiz.
Yukarıdakiler yapıldıktan sonra, bir kalıbı aşağıdaki şekilde test edebiliriz:
 if (ourString.matches (ourExpression)) {// Eğer burada eşleşirse bir kod çalıştırırız} 

yöntemini kullandığımızı görüyoruz. maçlar (), bu, karakter dizesini normal ifade düzenine göre değerlendirecek ve geri dönecektir. NS veya yanlış, karakter dizisinin desenle eşleşmesi veya eşleşmemesi durumunda.
Bu tür bir kullanım küçük doğrulamalarda iyidir, ancak yinelenen bir doğrulama kullanacaksak, yani programımızda birçok kez görünecekse, dizeyi değerlendirmemize izin veren küçük bir rutin veya sınıf yapmak en iyisidir. parametrik formun, yani bir dizi girmemize ve zaten belirli bir modelle karşılaştırarak doğru veya yanlış döndürmemize izin veren bir rutin veya yöntem.
Aşağıdaki programda küçük bir deseni test edeceğiz ve onu birkaç dizgeye karşı değerlendireceğiz ve program bize hangisini yaptığını söyleyecek. eşleşme, yani hangisi uyuşuyor hangisi uymuyor, kodu görelim ve sonra nasıl çalıştığını görelim:
 java.util.regex'i içe aktar *; public class TestPatterns {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; String [] input = {"QA777. Ürünümüzün tanımlayıcısıdır.", "Quack, Quack, Quack!" }; Model p = Pattern.compile (desen); for (String in: input) {boolean bulundu = p.matcher (in) .lookAt (); System.out.println ("'" + desen + "'" + (bulundu? "Eşleşmeler": "eşleşmiyor'") + + "'"); }}} 

Burada, düzenli ifadelerle aramanın işlevlerini bu şekilde elde etmek için yaptığımız ilk şeyin bu bölümün başında belirtilen paketi nasıl içe aktarmak olduğunu görüyoruz. Daha sonra programımız olan kullanacağımız bir kalıp oluşturuyoruz, bu durumda “harfine uyan bir kalıp”Q"O zaman harf dışında herhangi bir karaktere sahip olmalı"veya”Ve bir nokta ile bitmeli. Daha sonra metodu kullanarak kalıbımızı derliyoruz. derlemek ve bunu maçları yapmak için kullanabiliriz. Son olarak, desen eşleşirse, kelime ile yazdırılır. eşleşme yoksa yazdırırız Eşleşmiyor.
Aşağıdaki resimde programı çalıştırdığımızda bunun nasıl göründüğünü görelim:

BÜYÜT

Ardından, açıklandığı gibi, ilk dize veya zincir eşleşirse not ederiz, ancak ikincisi eşleşmez ve daha fazla referans için karşılaştırmanın yapılması gereken modeli yerleştiririz.
Şimdi daha gelişmiş bir örnek uygulayacağız, dizimizin hangi bölümünün eşleştiğini belirleyeceğiz, bu metin aramaları yaparken çok kullanışlıdır, çünkü bununla kullanıcının girdiği eşleşmeleri vurgulayabiliriz.
Bunun için önceki programımızın aynı tabanını bazı değişikliklerle kullanacağız, kodu ve ardından açıklamasını görelim:
 java.util.regex'i içe aktar *; public class Match {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; Model r = Pattern.compile (desen); String text = "Kimlik: QW990. Testin sonu!"; Eşleştirici m = r.eşleştirici (metin); if (m.find ()) {System.out.println (desen + "eşleşir \" "+ m.group (0) +" \ "inside \" "+ metin +" \ ""); } else {System.out.println ("Eşleşme yok"); }}} 

Paket dahil programımıza nasıl başladığımızı bir kez daha görüyoruz. java.util.regex.*. Daha sonra bir önceki programdan aynı kalıbı kullanıyoruz ve metotla derliyoruz. derlemek, ilginç olan şimdi geliyor, yöntemi kullandık eşleştirici () eşleşmeyi bulmak ve ardından yöntemle bulmak () ve yöntem grup () tam olarak eşleşenleri çıkarabiliyoruz, son olarak ilgili ekran baskılarını yapıyoruz. Şimdi programımızın nasıl göründüğünü görelim:

BÜYÜT

Böylece, karşılaştırma için düzenlediğimiz kalıba gerçekten uyan kelimeyi nasıl izole edebildiğimizi görüyoruz. normal ifade.
En çok kullanılan uygulamalardan biri de formlardoğrulamalarını yapabileceğimiz yer e-postalar, telefon numaraları, kredi kartları, şifreler, IP adresleri, kullanıcı adları, posta kodları ve hatta HTML belgemizdeki tüm etiketlerimizin doğru şekilde kapatıldığını doğrulayın, bu bize kullanıcılar tarafından girilen metni işlememizde daha fazla güvenlik elde etme imkanı verir.
Ancak, son örneğimizde fark ettiğimiz gibi, yalnızca form alanlarındaki doğrulamalarda değil, aynı zamanda şunu da yapabiliriz. uzun metin aramaları Belirli bir modelle, onunla çok karmaşık metin belgelerini sistematik bir şekilde arayabilir ve böylece sadece küçük bir program yazarak çok zaman kazanabiliriz.
Bununla, bu öğreticiyi bitiriyoruz, kalıplarımızdaki durumları ifade etmek için farklı öğelere sahip olmaktan, değerlendirmek istediğimiz metin veya karakterlerin karşılık gelen karşılaştırmalarını etkili bir şekilde yapmaya nasıl geçebileceğimizi öğrendik, tüm bunlar düzenli ifadeler. Bu değerlendirmeler, dilin bize sunduğu yöntemlerde yaptığı optimizasyonlar sayesinde oldukça hızlıdır, bu nedenle kullanıcının girdiği metni aramamız ve doğrulamamız gereken arayüzlerin inşası için çok uygundur.Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave