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

Ekspresi Reguler Java: Menguasai Pencocokan Pola dengan java.util.regex

Java menyediakan paket java.util.regex untuk pencocokan pola menggunakan 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 mencari string lain atau himpunan string, menggunakan sintaks khusus yang disimpan dalam pola. Ekspresi reguler dapat digunakan untuk mencari, mengedit, atau memanipulasi teks dan data.

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

Grup Pengambilan (Capturing Groups)

Grup pengambilan adalah cara untuk memperlakukan beberapa karakter sebagai satu unit. Grup dibuat dengan menempatkan karakter yang akan digolongkan di dalam sepasang tanda kurung. Misalnya, ekspresi reguler (dog) membuat satu grup yang berisi huruf "d", "o", dan "g".

Grup pengambilan diberi nomor dengan menghitung tanda kurung pembuka dari kiri ke kanan. Dalam ekspresi ((A)(B(C))), misalnya, terdapat empat grup berikut:

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

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

Contoh

Contoh berikut menunjukkan cara mencari string angka dari string alfanumerik yang diberikan:

Live Demo
 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public static void main( String args[] ) { // String yang akan dipindai untuk menemukan pola. String line = "This order was placed for QT3000! OK?"; String pattern = "(.*)(\\d+)(.*)"; // Buat objek Pattern Pattern r = Pattern.compile(pattern); // Buat objek matcher. Matcher m = r.matcher(line); if (m.find( )) { System.out.println("Nilai ditemukan: " + m.group(0) ); System.out.println("Nilai ditemukan: " + m.group(1) ); System.out.println("Nilai ditemukan: " + m.group(2) ); } else { System.out.println("TIDAK ADA COCOKAN"); } } } 

Hasil yang dihasilkan adalah sebagai berikut:

Keluaran

 Nilai ditemukan: This order was placed for QT3000! OK? Nilai ditemukan: This order was placed for QT300 Nilai ditemukan: 0 

Sintaks Ekspresi Reguler

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

Subekspresi Cocokkan
^ Mencocokkan awal baris.
$ Mencocokkan akhir baris.
. Mencocokkan satu karakter apa pun kecuali baris baru. Menggunakan opsi m memungkinkan mencocokkan baris baru juga.
[...] Mencocokkan satu karakter apa pun di dalam kurung siku.
[^...] Mencocokkan satu karakter apa pun yang tidak ada di dalam kurung siku.
\A Awal seluruh string.
\z Akhir seluruh string.
\Z Akhir seluruh string kecuali terminator baris akhir yang diperbolehkan.
re* Mencocokkan 0 atau lebih kemunculan ekspresi sebelumnya.
re+ Mencocokkan 1 atau lebih dari hal sebelumnya.
re? Mencocokkan 0 atau 1 kemunculan ekspresi sebelumnya.
re{ n} Mencocokkan tepat n kemunculan ekspresi sebelumnya.
re{ n,} Mencocokkan n atau lebih kemunculan ekspresi sebelumnya.
re{ n, m} Mencocokkan paling sedikit n dan paling banyak m kemunculan ekspresi sebelumnya.
a| b Mencocokkan a atau b.
(re) Mengelompokkan ekspresi reguler dan mengingat teks yang cocok.
(?: re) Mengelompokkan ekspresi reguler tanpa mengingat teks yang cocok.
(?> re) Mencocokkan pola independen tanpa backtracking.
\w Mencocokkan karakter kata.
\W Mencocokkan karakter non-kata.
\s Mencocokkan spasi putih. Sama dengan [\t\n\r\f].
\S Mencocokkan non-spasi putih.
\d Mencocokkan digit. Sama dengan [0-9].
\D Mencocokkan non-digit.
\A Mencocokkan awal string.
\Z Mencocokkan akhir string. Jika ada baris baru, mencocokkan tepat sebelum baris baru.
\z Mencocokkan akhir string.
\G Mencocokkan titik di mana pencocokan terakhir selesai.
\n Referensi balik ke grup pengambilan nomor "n".
\b Mencocokkan batas kata ketika di luar kurung. Mencocokkan backspace (0x08) ketika di dalam kurung.
\B Mencocokkan batas non-kata.
\n, \t, dll. Mencocokkan baris baru, carriage return, tab, dan sebagainya.
\Q Escape (kutip) semua karakter hingga \E.
\E Mengakhiri kutipan yang dimulai dengan \Q.

Metode Kelas Matcher

Berikut adalah daftar metode instance yang berguna:

Metode Indeks

Metode indeks memberikan nilai indeks yang menunjukkan secara tepat di mana pencocokan ditemukan dalam string masukan:

Sr.No. Metode & Deskripsi
1

public int start()

Mengembalikan indeks awal dari pencocokan sebelumnya.

2

public int start(int group)

Mengembalikan indeks awal subsequensi yang ditangkap oleh grup yang diberikan selama operasi pencocokan sebelumnya.

3

public int end()

Mengembalikan offset setelah karakter terakhir yang cocok.

4

public int end(int group)

Mengembalikan offset setelah karakter terakhir subsequensi yang ditangkap oleh grup yang diberikan selama operasi pencocokan sebelumnya.

Metode Studi

Metode studi meninjau string masukan dan mengembalikan Boolean yang menunjukkan apakah pola ditemukan atau tidak:

Sr.No. Metode & Deskripsi
1

public boolean lookingAt()

Mencoba mencocokkan urutan masukan, dimulai dari awal wilayah, terhadap pola.

2

public boolean find()

Mencoba menemukan subsequensi berikutnya dari urutan masukan yang cocok dengan pola.

3

public boolean find(int start)

Mengatur ulang matcher ini dan kemudian mencoba menemukan subsequensi berikutnya dari urutan masukan yang cocok dengan pola, dimulai dari indeks yang ditentukan.

4

public boolean matches()

Mencoba mencocokkan seluruh wilayah terhadap pola.

Metode Penggantian

Metode penggantian adalah metode berguna untuk mengganti teks dalam string masukan:

Sr.No. Metode & Deskripsi
1

public Matcher appendReplacement(StringBuffer sb, String replacement)

Mengimplementasikan langkah tambah-dan-ganti non-terminal.

2

public StringBuffer appendTail(StringBuffer sb)

Mengimplementasikan langkah tambah-dan-ganti terminal.

3

public String replaceAll(String replacement)

Mengganti setiap subsequensi dari urutan masukan yang cocok dengan pola dengan string pengganti yang diberikan.

4

public String replaceFirst(String replacement)

Mengganti subsequensi pertama dari urutan masukan 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 kelas Matcher.

Metode start dan end

Contoh berikut menghitung jumlah kali kata "cat" muncul dalam string masukan:

Contoh

Live Demo
 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); // dapatkan objek matcher int count = 0; while(m.find()) { count++; System.out.println("Pencocokan ke-"+count); System.out.println("start(): "+m.start()); System.out.println("end(): "+m.end()); } } } 

Hasil yang dihasilkan adalah sebagai berikut:

Keluaran

 Pencocokan ke-1 start(): 0 end(): 3 Pencocokan ke-2 start(): 4 end(): 7 Pencocokan ke-3 start(): 8 end(): 11 Pencocokan ke-4 start(): 19 end(): 22 

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

Metode start mengembalikan indeks awal subsequensi yang ditangkap oleh grup yang diberikan selama operasi pencocokan sebelumnya, dan end mengembalikan indeks karakter terakhir yang cocok, ditambah satu.

Metode matches dan lookingAt

Metode matches dan lookingAt keduanya mencoba mencocokkan urutan masukan terhadap pola. Perbedaannya adalah matches memerlukan seluruh urutan masukan untuk dicocokkan, sedangkan lookingAt tidak.

Kedua metode selalu dimulai dari awal string masukan. Berikut adalah contoh yang menjelaskan fungsionalitas:

Contoh

Live Demo
 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("REGEX saat ini: "+REGEX); System.out.println("INPUT saat ini: "+INPUT); System.out.println("lookingAt(): "+matcher.lookingAt()); System.out.println("matches(): "+matcher.matches()); } } 

Hasil yang dihasilkan adalah sebagai berikut:

Keluaran

 REGEX saat ini: foo INPUT saat ini: fooooooooooooooooo lookingAt(): true matches(): false 

Metode replaceFirst dan replaceAll

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

Berikut adalah contoh yang menjelaskan fungsionalitas:

Contoh

Live Demo
 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); // dapatkan objek matcher Matcher m = p.matcher(INPUT); INPUT = m.replaceAll(REPLACE); System.out.println(INPUT); } } 

Hasil yang dihasilkan adalah sebagai 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 fungsionalitas:

Contoh

Live Demo
 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); // dapatkan objek matcher Matcher m = p.matcher(INPUT); StringBuffer sb = new StringBuffer(); while(m.find()) { m.appendReplacement(sb, REPLACE); } m.appendTail(sb); System.out.println(sb.toString()); } } 

Hasil yang dihasilkan adalah sebagai berikut:

Keluaran

 -foo-foo-foo- 

Metode Kelas PatternSyntaxException

Sebuah PatternSyntaxException adalah pengecualian tidak diperiksa yang menunjukkan kesalahan sintaks dalam pola ekspresi reguler. Kelas PatternSyntaxException menyediakan metode berikut untuk membantu Anda menentukan apa yang salah:

Sr.No. Metode & Deskripsi
1

public String getDescription()

Mengambil deskripsi kesalahan.

2

public int getIndex()

Mengambil indeks kesalahan.

3

public String getPattern()

Mengambil pola ekspresi reguler yang salah.

4

public String getMessage()

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

java

  1. Ekspresi, Pernyataan, dan Blok C#: Panduan Komprehensif dengan Contoh Praktis
  2. Menguasai Operator Java: Tipe, Sintaks, & Contoh Praktis
  3. Memahami Ekspresi, Pernyataan, dan Blok Java
  4. Komentar Java: Tipe, Penggunaan, dan Best Practices
  5. Menguasai Java Enhanced For Loop: Sintaks, Contoh, dan Best Practices
  6. Menguasai String Java: Pembuatan, Metode, dan Best Practices
  7. Menguasai Antarmuka Java: Konsep, Implementasi, dan Praktik Terbaik
  8. Menguasai Java Try-with-Resources: Manajemen Sumber Daya Otomatis Dijelaskan
  9. Anotasi Java Dijelaskan: Jenis, Penempatan, dan Contoh Praktis
  10. Pernyataan Java: Panduan Praktis untuk Mendeteksi Bug dan Memastikan Keandalan Kode