Java reqsi


Java RegexBaxılıb 238

Bu təlimatda, Java Regular ifadəsinin nə olduğunu və pattern.matcher istifadə edərək nümunə uyğunluğu üçün java substring regex-in necə istifadə olunacağını müzakirə edəcəyik. Java naxışları üçün istifadə etdiyimiz müxtəlif java regex xüsusi simvollarını da əhatə edəcəyik.

Daimi ifadə (Java regex) nədir?

Adi ifadə a-da müəyyən naxışları axtarmaq üçün istifadə etdiyimiz bir texnikadır sim. Ya tək bir simvol, ya da bir sıra simvol ola bilər. Hər növ simli axtarış və əvəzləmə əməliyyatı aparmaq üçün java regex istifadə edə bilərik.

Java normal ifadəsini istifadə etmək üçün java.util.regex-i idxal edə bilərik paketi.

java.util.regex paketi

Java.util.regex paketi aşağıda göstərildiyi kimi 1 interfeys və 3 sinifdən ibarətdir:

  • MatchResult interfeysi
  • Uyğun sinif
  • Nümunə sinfi
  • PatternSyntaxException sinfi

Java Daimi ifadə və ya RegEx PatternPin

Nümunə sinfi

Pattern sinfi java tətbiq etmək üçün istifadə olunur Müntəzəm ifadə. Daimi ifadəni arqument olaraq qəbul edən və nümunə uyğunluğu üçün istifadə edə biləcəyimiz bir nümunə obyektini qaytaran bir compile () metodu var.

Aşağıda Pattern sinfinin çox istifadə olunan metodları verilmişdir:

Üsultəsvir
Matcher uyğunluğu (CharSequence girişi)Verilən nümunə ilə girişə uyğun bir uyğunlaşdırıcı yaradır
Simli naxış ()Nümunənin tərtib olunduğu normal ifadəni qaytarır
String [] split (CharSequence girişi)Nümunə uyğunluğu daxilində ardıcıllığı bölür
Nümunə tərtibi (String regex)Nümunə kimi müntəzəm ifadəni tərtib edir
boolean matçlar (String regex, CharSequence girişi, Adi ifadəni tərtib edir və bir nümunə uyğunluğu həyata keçirir.

Kompilyasiya metodunda bir model java uyğunluğunun necə həyata keçiriləcəyini göstərən bir seçim bayrağı parametri var:

  • Pattern.CASE_INSENSITIVE: məktub davası nümunə axtarışı zamanı
  • Pattern.LITERAL: xüsusi simvol nümunə axtarışı zamanı adi personajlar kimi
  • Pattern.UNICODE_CASE: CASE_INSENSITIVE ilə birlikdə xaricindəki məktubların vəziyyətini görməməzlikdən gəlmək üçün istifadə olunur. İngilis əlifbaları.

Uyğun sinif

Matcher sinfi MatchResult interfeysini həyata keçirir və simvol ardıcıllığı ilə naxış oyunları həyata keçirir. Pattern obyektindəki uyğunlaşdırma metodundan istifadə edərək bir Matcher obyekti yarada bilərik.

Aşağıda Matcher sinifində mövcud olan müxtəlif metodlar verilmişdir:

Üsultəsvir
int sonu ()Uyğun olan son simvol ofsetini qaytarır
boolean tap ()Nümunəyə uyğun gələn girişin sonrakı ardıcıllığını tapır
boolean tapmaq (int başlanğıc)Uyğunluğu sıfırlayır və göstərilən indeksdən başlayaraq nümunəyə uyğun gələn girişin sonrakı ardıcıllığını tapır
Simli qrup ()İfadəyə uyğun gələn giriş ardıcıllığını qaytarır
int groupCount ()Uyğunlaşdırma qaydasında çəkmə qruplarının sayını qaytarır
boolean matçlar ()Nümunə ilə uyğunluğu tapır
Nümunə naxışı ()Uyğunlaşdırıcının təfsir etdiyi nümunəni qaytarır
Matcher bölgəsi (int başlanğıc, int son)Nümunə uyğunluğu yerinə yetirmək üçün bölgənin limitini təyin edir
Simli əvəzAll (simli dəyişdirmə)Verilən yeni sətirlə naxışa uyğun gələn bütün altlığı dəyişdirir
Matçın sıfırlanması ()Uyğunluğu sıfırlayır

Daimi İfadə Nümunələri

Giriş sətirində əlifba və ya ədədi normal ifadə nümunələrini yoxlaya bilərik. Nümunə sinfinin tərtib metodu bu müntəzəm ifadəni ilk parametr kimi qəbul edir. Nümunələrin və ya xarakter siniflərinin müxtəlif birləşmələri aşağıdakılardır:

modeltəsvir
[abc]Mötərizədə verilmiş seçimlərdən bir xarakter tapır
[^ abc]Mötərizədə verilmiş seçimlər arasında olmayan bir xarakter tapır
[0-9]0-9 aralığında bir xarakter tapır
[a-zA-Z]Hər iki halın a - z arasında bir xarakter tapır
[ag [kr]]A - g və k - r (birləşmə) arasında bir xarakter tapır
[az && [lmn]]A ilə z arasında l, m, n - kəsişmə olan bir xarakter tapır
[az && [^ de]]D və e - çıxma xaricində a və z arasında bir xarakter tapır
[az && [^ hk]]H və k aralığı xaricində a və z arasında bir xarakter tapır

Metaxarvollar

Xüsusi mənaya malik olan müntəzəm ifadə nümunələrinin bir hissəsi kimi metakarvatlardan da istifadə edə bilərik.

Metakaraktertəsvir
|| İlə ayrılmış naxışlardan hər hansı birinə uyğunluq tapır
.Hər hansı bir xarakterin tək bir nümunəsini tapır
^Sıranın əvvəlində bir uyğunluq tapır
$Sıranın sonunda bir uyğunluq tapır
\dRəqəm tapır
\sBoşluq xarakteri tapır
\bSözün əvvəlində və ya sonunda bir uyğunluq tapır
\ uxxxxOnaltılıq xxxx rəqəmi ilə təyin edilmiş bir unikod xarakterini tapır
\D[^ 0-9] rəqəminə bərabər olmayan hər hansı bir rəqəm
\S[^ \ S] -ə bərabər olan boşluq olmayan hər hansı bir xarakter
\w[A-zA-Z_0-9] -ə bərabər olan hər hansı bir söz xarakteri
\W[^ \ W] -ə bərabər olan hər hansı bir söz olmayan simvol

Ölçülər

Miqdarı müəyyən etmək üçün kantifikatorlardan istifadə edə bilərik və ya hadisələrin sayı müntəzəm ifadə modelində göstərilən xarakterin.

Kəmiyyəttəsvir
a+a bir və ya daha çox dəfə baş verir
a*a sıfır və ya daha çox dəfə baş verir
a?a sıfır və ya bir dəfə baş verir
a {n}a n dəfə baş verir
a {n,}a n və ya daha çox dəfə baş verir
a {m, n}a ən az m dəfə, lakin n dəfədən az olur

Java Regular ifadələr nümunələri

İndi fərqli java nümunələrini nümayiş etdirən müxtəlif java regex nümunələrinə baxaq.

Misal: bir simli tapın

Aşağıda giriş mətnində “java” simli olan java nümunəsini tapmaq üçün sadə bir nümunə var. Lazımi nümunəni yoxlamaq üçün java pattern.matcher metodundan istifadə edir. Nümunə tapılsa, doğru qayıdır, əks halda yalan qaytarır.

import java.util.regex.*;

public class RegExDemo {

  public static void main(String[] args) {
    Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher("Welcome to Java tutorial");
    
    boolean bfound = m.find();
    if(bfound)
      System.out.println("Pattern found");
    else
      System.out.println("Pattern not found");
  }

}
Pattern found

Nümunə: Müntəzəm ifadə yazmağın fərqli üsulları

Java-da müntəzəm ifadə nümunələrini yazmağın müxtəlif üsulları var. 1-ci metod Pattern.matcher metodu ilə Pattern və Matcher sinifinin və müxtəlif ifadələrdə uyğunlaşma metodunun birləşməsindən istifadə edir. 2-ci metod eyni birləşməni istifadə edir, lakin tək bir açıqlamada, üçüncü metod isə adi ifadə nümunəsini axtarmaq üçün yalnız Pattern.matches istifadə edir.

Bu nümunədə 2-ci simvol ilə 'a' şəklində nümunəni yoxlayırıq və qalan simvollar hər hansı bir hərf ola bilər.

import java.util.regex.*;
public class RegExDemo2 {

  public static void main(String[] args) {
    Pattern p = Pattern.compile(".a..");
    Matcher m = p.matcher("java");
    System.out.println(m.matches());
    
    boolean b = Pattern.compile(".a..").matcher("java").matches();
    System.out.println(b);
    
    boolean bm = Pattern.matches(".a..", "java");
    System.out.println(bm);

  }

}
true
true
true

Misal: müntəzəm ifadə nümunəsindən istifadə. (nöqtə)

Aşağıdakı nümunə normal bir ifadə üçün. (Dot) simvolundan istifadənin fərqli nümayişlərini göstərir. 1-ci çıxış doğrudur, çünki 2-ci işarəyə sahib girişə i kimi uyğun gəlir. 2-ci simvolda 'i' olmadığından verilmiş ifadə ilə uyğun gəlmədiyi üçün ikinci çıxış səhvdir. 2-dən çox simvol olduğundan 3-cü çıxış səhvdir. Son 3 deyim doğrudur, çünki 2-ci simvol 'h' və sonuncu simvol da müvafiq olaraq simvol uzunluğunun sayına uyğun olaraq 'e' -dir.

import java.util.regex.*;
public class RegExDemo3 {

  public static void main(String[] args) {
    System.out.println(Pattern.matches(".i", "hi"));
    System.out.println(Pattern.matches(".i", "at"));
    System.out.println(Pattern.matches(".a.", "java"));
    System.out.println(Pattern.matches("h.", "hi"));
    System.out.println(Pattern.matches("..e", "bye"));

  }

}
true
false
false
true
true

Misal: Daimi ifadə xarakter sinfi

Bu nümunədə simvolları normal ifadə nümunəsi kimi istifadə edirik. Nümunə giriş sətrində mövcuddursa, true qaytarır, əks halda false qaytarır.

import java.util.regex.*;
public class RegExDemo4 {

  public static void main(String[] args) {
    System.out.println(Pattern.matches("[abc]", "bag"));
    System.out.println(Pattern.matches("[abc]", "a"));
    System.out.println(Pattern.matches("[a-c][p-u]", "ar"));
    System.out.println(Pattern.matches(".*come.*", "welcome"));
    System.out.println(Pattern.matches("java", "Java"));
  }

}
false
true
true
true
false

Misal: Daimi ifadə kəmiyyəti

Aşağıdakı nümunədə '?' Kimi müxtəlif kəmiyyət göstəricilərindən istifadə edirik. işarənin yalnız bir dəfə baş verdiyini yoxlayır, '+' simvolun birdən çox baş verdiyini yoxlayır və '*' simvolun sıfır və ya daha çox dəfə baş verdiyini yoxlayır.

import java.util.regex.*;
public class RegExDemo5 {

  public static void main(String[] args) {
    System.out.println(Pattern.matches("[lmn]?", "l"));
    System.out.println(Pattern.matches("[lmn]?", "hello"));
    System.out.println(Pattern.matches("[lmn]+", "llmmn"));
    System.out.println(Pattern.matches("[lmn]*", "java"));
    System.out.println(Pattern.matches("[lmn]*", "lln"));
  }

}
true
false
true
false
true

Nümunə: Eşleme metodundan istifadə edərək çoxsaylı hadisələr tapın

Aşağıdakı nümunə çoxlu hadisələr Pattern.matcher metodundan istifadə edərək giriş sətrindəki nümunənin. Sətirdə 'a' simvolunun meydana gəldiyi yerləri göstərir.

import java.util.regex.*;
public class RegExDemo6 {

  public static void main(String[] args) {
    Pattern p = Pattern.compile("a");
    Matcher m = p.matcher("Welcome to java tutorial");
    
    while(m.find()) {
      System.out.println("Occurs at: " + m.start() + " - " + m.end());
    }

  }

}
Occurs at: 12 - 13
Occurs at: 14 - 15
Occurs at: 22 - 23

Misal: Sərhəd oyunları

Bu, sərhəd uyğunluqlarını yoxlayan java nümunə nümunələrindən biridir. Bu axtarış nümunəsindəki bir növ java regex xüsusi simvoludur. Birinci çıxış nümunədən bəri doğrudur sətrin əvvəlinə uyğun gəlir nümunə ilə başlamadığı üçün ikincisi yanlışdır.

import java.util.regex.*;
public class RegExDemo7 {

  public static void main(String[] args) {
    System.out.println(Pattern.matches("^Java$","Java"));
    System.out.println(Pattern.matches("^Java$","Welcome to java"));
    
  }

}
true
false

Misal: Rəqəmlərlə müntəzəm ifadə

Bu misal adi ifadədə rəqəm nümunəsindən istifadə edir. “Java” sözündən sonra gələn hər hansı bir rəqəmlə uyğunluğu yoxlayır. Beləliklə, 1-ci 2 çıxışı bir rəqəmi ehtiva etdiyi üçün doğrudur, son çıxışı isə heç bir rəqəmi olmadığı üçün səhvdir.

import java.util.regex.*;
public class RegExDemo7 {

  public static void main(String[] args) {
    String regex = "Java\\d";
    System.out.println(Pattern.matches(regex, "Java5"));
    System.out.println(Pattern.matches(regex, "Java8"));
    System.out.println(Pattern.matches(regex, "JavaScript"));
    
  }

}
true
true
false

Nümunə: Məntiqi operatorların müntəzəm ifadə qaydasında istifadəsi

Nümunələrdə AND, OR kimi məntiqi operatorlardan da istifadə edə bilərik. Varsayılan olaraq, normal ifadə nümunəsində birdən çox simvol olduğumuzda və AND operatorunu nəzərə alır. Məsələn, aşağıdakı kodda ilk 2 simvol 'c' və 'h' olduqda nəticə doğrudur. Beləliklə, 1-ci çıxışı doğrudur və son çıxışı səhvdir.

import java.util.regex.*;
public class RegExDemo8 {

  public static void main(String[] args) {
    String regex = "[Cc][h].*";
    String s = "cheque";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(s);
    
    System.out.println(m.matches());
    
    s = "Chart";
    m = p.matcher(s);
    System.out.println(m.matches());

    s = "color";
    m = p.matcher(s);
    System.out.println(m.matches());
  }

}
true
true
false

'|' İstifadə edərək OR operatorundan istifadə edə bilərik uyğun naxışları yoxlamaq üçün simvol. Bu nümunədə, giriş sətirində “Java” və ya “JavaScript” mətni varsa, nəticə doğrudur.

import java.util.regex.*;
public class RegExDemo8 {

  public static void main(String[] args) {
    
    String regex = ".*Java.*|.*JavaScript.*";
    String s = "Welcome to Java tutorial";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(s);
    System.out.println(m.matches());
    
    s = "JavaScript tutorial";
    m = p.matcher(s);
    System.out.println(m.matches());
    
    s = "C tutorial";
    m = p.matcher(s);
    System.out.println(m.matches());
  }

}
true
true
false

Yuxarıda göstərilən iki nümunə, giriş sətirində bir alt sətir olduğunu yoxladığımızdan, nümunə axtarışında java substring regex-in istifadəsini də göstərir.

nəticə

Bu təlimatda, Pattern.matcher və digər metodlardan istifadə edərək Java Regex xüsusi simvollarının və java substring regex-in nümunə axtarışında necə istifadə ediləcəyini və nümunələri istifadə edərək Java Regular ifadə nümunəsi uyğunluğunu öyrəndik.

arayış

Şərh yaz

Translate »
2