Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Java - Ekspresi Reguler

Java menyediakan paket java.util.regex untuk pencocokan pola dengan ekspresi reguler. Ekspresi reguler Java sangat mirip dengan bahasa pemrograman Perl dan sangat mudah dipelajari.

Ekspresi reguler adalah urutan karakter khusus yang membantu Anda mencocokkan atau menemukan string atau set string lain, menggunakan sintaks khusus yang disimpan dalam suatu pola. Mereka dapat digunakan untuk mencari, mengedit, atau memanipulasi teks dan data.

Paket java.util.regex terutama terdiri dari tiga kelas berikut

Mengambil Grup

Menangkap grup adalah cara untuk memperlakukan banyak karakter sebagai satu kesatuan. Mereka dibuat dengan menempatkan karakter yang akan dikelompokkan di dalam satu set tanda kurung. Misalnya, ekspresi reguler (anjing) membuat grup tunggal yang berisi huruf "d", "o", dan "g".

Grup penangkap diberi nomor dengan menghitung tanda kurung buka dari kiri ke kanan. Dalam ekspresi ((A)(B(C))), misalnya, ada empat grup seperti itu

Untuk mengetahui berapa banyak grup yang ada dalam ekspresi, panggil metode groupCount pada objek matcher. Metode groupCount mengembalikan int menunjukkan jumlah grup penangkap yang ada dalam pola matcher.

Ada juga grup khusus, grup 0, yang selalu mewakili seluruh ekspresi. Grup ini tidak termasuk dalam total yang dilaporkan oleh groupCount.

Contoh

Contoh berikut mengilustrasikan cara menemukan string digit dari string alfanumerik yang diberikan

Demo Langsung
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   public static void main( String args[] ) {
      // String to be scanned to find the pattern.
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      }else {
         System.out.println("NO MATCH");
      }
   }
}

Ini akan menghasilkan hasil berikut

Keluaran

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

Sintaks Ekspresi Reguler

Berikut adalah tabel yang mencantumkan semua sintaks metakarakter ekspresi reguler yang tersedia di Java −

Subekspresi Cocok
Cocok dengan awal baris.
$ Cocok dengan akhir baris.
. Cocok dengan satu karakter apa pun kecuali baris baru. Menggunakan m opsi memungkinkannya untuk mencocokkan baris baru juga.
[...] Cocok dengan satu karakter dalam tanda kurung.
[^...] Cocok dengan satu karakter apa pun yang tidak ada dalam tanda kurung.
\A Awal dari seluruh string.
\z Akhir dari seluruh string.
\Z Akhir dari seluruh string kecuali terminator baris terakhir yang diizinkan.
ulang* Mencocokkan 0 atau lebih kemunculan ekspresi sebelumnya.
re+ Cocok 1 atau lebih dari hal sebelumnya.
kembali? Mencocokkan 0 atau 1 kemunculan ekspresi sebelumnya.
kembali{ n} Cocok persis n jumlah kemunculan ekspresi sebelumnya.
kembali{ n,} Cocok dengan n atau lebih kemunculan ekspresi sebelumnya.
kembali{ n, m} Cocok setidaknya n dan paling banyak m kemunculan ekspresi sebelumnya.
a| b Cocok dengan a atau b.
(kembali) Mengelompokkan ekspresi reguler dan mengingat teks yang cocok.
(?:re) Mengelompokkan ekspresi reguler tanpa mengingat teks yang cocok.
(?> re) Mencocokkan pola independen tanpa mundur.
\w Mencocokkan karakter kata.
\W Mencocokkan karakter bukan kata.
\s Mencocokkan spasi putih. Setara dengan [\t\n\r\f].
\S Cocok dengan bukan spasi.
\d Mencocokkan angka. Setara dengan [0-9].
\D Cocok dengan nondigit.
\A Cocok dengan awal string.
\Z Cocok dengan akhir string. Jika ada baris baru, itu cocok sebelum baris baru.
\z Cocok dengan akhir string.
\G Mencocokkan titik di mana pertandingan terakhir selesai.
\n Referensi balik untuk menangkap nomor grup "n".
\b Mencocokkan batas kata saat berada di luar tanda kurung. Mencocokkan spasi mundur (0x08) saat berada di dalam tanda kurung.
\B Mencocokkan batas bukan kata.
\n, \t, dll. Cocok dengan baris baru, carriage return, tab, dll.
\Q Escape (kutipan) semua karakter hingga \E.
\E Mengakhiri kutipan yang dimulai dengan \Q.

Metode Kelas Pencocokan

Berikut adalah daftar metode instance yang berguna

Metode Indeks

Metode indeks memberikan nilai indeks yang berguna yang menunjukkan dengan tepat di mana kecocokan ditemukan dalam string input −

No.Pr. Metode &Deskripsi
1

publik int start()

Mengembalikan indeks awal dari pertandingan sebelumnya.

2

mulai int publik(grup int)

Mengembalikan indeks awal dari urutan yang ditangkap oleh grup tertentu selama operasi pencocokan sebelumnya.

3

publik int end()

Mengembalikan offset setelah karakter terakhir cocok.

4

akhir int publik(grup int)

Mengembalikan offset setelah karakter terakhir dari urutan yang ditangkap oleh grup tertentu selama operasi pencocokan sebelumnya.

Metode Belajar

Metode studi meninjau string input dan mengembalikan Boolean yang menunjukkan apakah pola ditemukan atau tidak −

No.Pr. Metode &Deskripsi
1

pencarian boolean publik()

Mencoba mencocokkan urutan input, mulai dari awal region, dengan pola.

2

pencarian boolean publik()

Mencoba menemukan urutan berikutnya dari urutan input yang cocok dengan pola.

3

pencarian boolean publik(int start)

Menyetel ulang pencocokan ini dan kemudian mencoba menemukan urutan berikutnya dari urutan input yang cocok dengan pola, mulai dari indeks yang ditentukan.

4

kecocokan boolean publik()

Mencoba mencocokkan seluruh wilayah dengan pola.

Metode Pengganti

Metode penggantian adalah metode yang berguna untuk mengganti teks dalam string input −

No.Pr. Metode &Deskripsi
1

pencocokan publik appendReplacement(StringBuffer sb, penggantian String)

Menerapkan langkah append-and-replace non-terminal.

2

public StringBuffer appendTail(StringBuffer sb)

Menerapkan langkah tambahkan-dan-ganti terminal.

3

public String replaceAll(String replacement)

Mengganti setiap suburutan dari urutan input yang cocok dengan pola dengan string pengganti yang diberikan.

4

public String replaceFirst(Penggantian String)

Menggantikan urutan pertama dari urutan input yang cocok dengan pola dengan string pengganti yang diberikan.

5

public static String quoteReplacement(String s)

Mengembalikan String pengganti literal untuk String yang ditentukan. Metode ini menghasilkan String yang akan berfungsi sebagai pengganti literal s dalam metode appendReplacement dari kelas Matcher.

Metode awal dan akhir

Berikut adalah contoh yang menghitung berapa kali kata "kucing" muncul di string input −

Contoh

Demo Langsung
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   private static final String REGEX = "\\bcat\\b";
   private static final String INPUT = "cat cat cat cattie cat";

   public static void main( String args[] ) {
      Pattern p = Pattern.compile(REGEX);
      Matcher m = p.matcher(INPUT);   // get a matcher object
      int count = 0;

      while(m.find()) {
         count++;
         System.out.println("Match number "+count);
         System.out.println("start(): "+m.start());
         System.out.println("end(): "+m.end());
      }
   }
}

Ini akan menghasilkan hasil berikut

Keluaran

Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22

Anda dapat melihat bahwa contoh ini menggunakan batas kata untuk memastikan bahwa huruf "c" "a" "t" bukan hanya substring dalam kata yang lebih panjang. Ini juga memberikan beberapa informasi berguna tentang di mana dalam string input kecocokan telah terjadi.

Metode awal mengembalikan indeks awal dari urutan yang ditangkap oleh grup yang diberikan selama operasi pencocokan sebelumnya, dan akhir mengembalikan indeks karakter terakhir yang cocok, ditambah satu.

Metode yang cocok dan mencari

Metode match dan lookingAt keduanya mencoba mencocokkan urutan input dengan pola. Perbedaannya, bagaimanapun, adalah bahwa kecocokan membutuhkan seluruh urutan input untuk dicocokkan, sedangkan lookingAt tidak.

Kedua metode selalu dimulai di awal string input. Berikut adalah contoh yang menjelaskan fungsionalitas −

Contoh

Demo Langsung
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   private static final String REGEX = "foo";
   private static final String INPUT = "fooooooooooooooooo";
   private static Pattern pattern;
   private static Matcher matcher;

   public static void main( String args[] ) {
      pattern = Pattern.compile(REGEX);
      matcher = pattern.matcher(INPUT);

      System.out.println("Current REGEX is: "+REGEX);
      System.out.println("Current INPUT is: "+INPUT);

      System.out.println("lookingAt(): "+matcher.lookingAt());
      System.out.println("matches(): "+matcher.matches());
   }
}

Ini akan menghasilkan hasil berikut

Keluaran

Current REGEX is: foo
Current INPUT is: fooooooooooooooooo
lookingAt(): true
matches(): false

Metode replaceFirst dan replaceAll

Metode replaceFirst dan replaceAll menggantikan teks yang cocok dengan ekspresi reguler yang diberikan. Seperti namanya, replaceFirst menggantikan kemunculan pertama, dan replaceAll menggantikan semua kemunculan.

Berikut adalah contoh yang menjelaskan fungsionalitas −

Contoh

Demo Langsung
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   private static String REGEX = "dog";
   private static String INPUT = "The dog says meow. " + "All dogs say meow.";
   private static String REPLACE = "cat";

   public static void main(String[] args) {
      Pattern p = Pattern.compile(REGEX);
      
      // get a matcher object
      Matcher m = p.matcher(INPUT); 
      INPUT = m.replaceAll(REPLACE);
      System.out.println(INPUT);
   }
}

Ini akan menghasilkan hasil berikut

Keluaran

The cat says meow. All cats say meow.

Metode appendReplacement dan appendTail

Kelas Matcher juga menyediakan metode appendReplacement dan appendTail untuk penggantian teks.

Berikut adalah contoh yang menjelaskan fungsinya

Contoh

Demo Langsung
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   private static String REGEX = "a*b";
   private static String INPUT = "aabfooaabfooabfoob";
   private static String REPLACE = "-";
   public static void main(String[] args) {

      Pattern p = Pattern.compile(REGEX);
      
      // get a matcher object
      Matcher m = p.matcher(INPUT);
      StringBuffer sb = new StringBuffer();
      while(m.find()) {
         m.appendReplacement(sb, REPLACE);
      }
      m.appendTail(sb);
      System.out.println(sb.toString());
   }
}

Ini akan menghasilkan hasil berikut

Keluaran

-foo-foo-foo-

Metode Kelas PatternSyntaxException

PatternSyntaxException adalah pengecualian yang tidak dicentang yang menunjukkan kesalahan sintaksis dalam pola ekspresi reguler. Kelas PatternSyntaxException menyediakan metode berikut untuk membantu Anda menentukan apa yang salah −

No.Pr. Metode &Deskripsi
1

getDescription String publik()

Mengambil deskripsi kesalahan.

2

publik int getIndex()

Mengambil indeks kesalahan.

3

getPattern String publik()

Mengambil pola ekspresi reguler yang salah.

4

getMessage() String publik()

Mengembalikan string multi-baris yang berisi deskripsi kesalahan sintaksis dan indeksnya, pola ekspresi reguler yang salah, dan indikasi visual indeks kesalahan dalam pola.


java

  1. C# Ekspresi, Pernyataan, dan Blok (Dengan Contoh)
  2. Operator Jawa
  3. Ekspresi, Pernyataan, dan Blok Java
  4. Komentar Jawa
  5. Java untuk setiap Loop
  6. String Jawa
  7. Antarmuka Jawa
  8. Java mencoba-dengan-sumber daya
  9. Anotasi Jawa
  10. Pernyataan Jawa