Ekspresi reguler adalah sejenis pola yang dapat diterapkan pada teks (String, di Java). Java menyediakan paket
java.util.regex untuk mencocokkan ekspresi reguler. Ekspresi reguler sangat mirip dengan bahasa pemrograman Perl dan sangat mudah dipelajari. Ekspresi reguler cocok dengan teks (sebagiannya) atau tidak. * Jika ekspresi reguler cocok dengan sepotong teks, maka kita dapat menemukannya. ** Jika ekspresi regulernya adalah gabungan, maka kita dapat dengan mudah mengetahui bagian ekspresi reguler mana yang cocok dengan bagian teks mana.
Contoh pertama
Ekspresi reguler "
[a-z] +
" cocok dengan semua huruf kecil dalam teks.
[a-z]
berarti karakter apa pun dari
a
hingga
z
inklusif, dan
+
berarti "satu atau lebih" karakter. Anggaplah kita menyediakan string "kode 2 belajar tutorial java". Cara melakukan ini di Java Pertama, Anda harus membuat template:
import java.util.regex.*;
Pattern p = Pattern.compile(“[a-z]+”);
Selanjutnya Anda harus membuat
matcher
teks dengan mengirimkan pesan pada diagram:
Matcher m = p.matcher(“code 2 learn java tutorial”);
CATATAN: Tidak ada konstruktor
Pattern
,
Matcher
kami membuatnya menggunakan metode kelas
Pattern
.
Pattern Class:
Objek kelas merupakan representasi dari ekspresi reguler. Kelas Pattern tidak menyediakan konstruktor publik apa pun. Untuk membuat templat, Anda harus terlebih dahulu memanggil salah satu metode statis publik, yang kemudian mengembalikan objek kelas tersebut
Pattern
. Metode ini menggunakan ekspresi reguler sebagai argumen.
Matcher Class:
Objek Finder adalah mesin yang menafsirkan pola dan melakukan operasi pencocokan pada string masukan. Seperti
Pattern
sebuah kelas,
Matcher
ia tidak memiliki konstruktor publik. Anda mendapatkan objek
Matcher
dengan memanggil metode
matcher
pada objek kelas
Pattern
. Setelah kita menyelesaikan langkah-langkah ini, dan sekarang kita memiliki instance dari kelas tersebut
Matcher m
, kita sekarang dapat memeriksa apakah polanya ditemukan atau tidak, dan jika demikian, pada posisi apa, dll.
m.matches()
mengembalikan nilai benar jika polanya cocok dengan seluruh string, salah jika sebaliknya.
m.lookingAt()
mengembalikan nilai benar jika polanya cocok dengan awal string, salah jika sebaliknya.
m.find ()
mengembalikan nilai benar jika polanya cocok dengan bagian mana pun dari teks.
Menemukan kecocokan
Setelah pencocokan berhasil,
m.start() akan mengembalikan indeks karakter pertama yang cocok dan
m.end() akan mengembalikan indeks karakter terakhir yang cocok, ditambah satu. Jika upaya yang dilakukan gagal dan tidak ditemukan kecocokan,
m.start()
mereka
m.end()
akan melempar
IllegalStateException
- Ini
RuntimeException
agar Anda tidak perlu menangkapnya.
Mungkin terasa aneh untuk
m.end()
mengembalikan indeks karakter terakhir yang cocok ditambah satu, tapi itulah yang dilakukan sebagian besar karakter
String
.
- Misalnya,
“Now is the time“.substring(m.start(), m.end())
akan mengembalikan string yang sama. Mari kita lihat kodenya:
import java.util.regex.*;
public class RegexTest {
public static void main(String args[]) {
String pattern = "[a-z]+";
String text = "code 2 learn java tutorial";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);
while(m.find()) {
System.out.print(text.substring(m.start(), m.end()) + "*");
}
}
}
Output: code*learn*java*tutorial*
Metode Tambahan
Jika ada kecocokan, maka:
m.replaceFirst(replacement)
mengembalikan string baru, di mana substring pertama yang cocok dengan polanya akan digantireplacement
m.replaceAll(replacement)
mengembalikan string baru, di mana setiap substring yang cocok dengan polanya akan diganti
m.find(StartIndex)
temukan kecocokan berikutnya dimulai dari indeks yang ditentukan
m.reset()
mengatur ulang templat
m.reset(NewText)
mengatur ulang pencari, dan memberinya teks baru (mungkin String
, StringBuffer
atau CharBuffer
)
Sintaks ekspresi reguler
^
Cocok dengan awal baris.
$
Cocok dengan akhir string.
.
Cocok dengan karakter apa pun kecuali baris baru. Menggunakan opsi m memungkinkannya mencocokkan baris baru.
[...]
Cocok dengan karakter apa pun dalam tanda kurung.
[^ ...]
Cocok dengan karakter apa pun yang tidak ada dalam tanda kurung.
\A
Mulai seluruh baris.
\z
Akhir dari seluruh baris.
\Z
Akhir dari seluruh garis kecuali terminator garis terakhir.
re*
Cocok dengan 0 atau lebih kemunculan ekspresi sebelumnya.
re+
Satu atau lebih kecocokan dengan ekspresi sebelumnya.
re?
Cocokkan 0 atau 1 dengan lokasi ekspresi sebelumnya.
re{n}
Cocok persis dengan N Jumlah kemunculan ekspresi sebelumnya.
re{n,}
Cocok dengan N atau lebih kemunculan ekspresi sebelumnya.
re{n, m}
Cocok dengan paling sedikit n dan paling banyak m kemunculan ekspresi sebelumnya.
a|b
Cocok dengan a atau b.
(re)
Sekelompok ekspresi reguler dan mengingat teks yang ditemukan.
(?: re)
Kelompok ekspresi reguler yang tidak mengingat teks yang ditemukan.
(?> re)
Cocok dengan pola independen tanpa pengembalian.
\w
Mencocokkan huruf dan angka [a-zA-Z_0-9].
\W
Ini bukan huruf atau angka.
\s
Ruang yang cocok. Setara dengan [\t\n\r\f].
\S
Bukan karakter spasi putih.
\d
Cocok dengan angkanya. Setara dengan [0-9].
\D
Tidak cocok dengan angkanya.
\G
Cocok dengan poin pertandingan terakhir.
\n
Cocok dengan baris baru.
\b
Cocok pada batas kata.
\B
Cocok tidak pada batas kata.
\n, \t, etc.
Karakter baris baru, pengangkutan kembali, tab, dll.
\Q
Kutip semua karakter sebelum \E.
\E
Kutipan yang dimulai dengan \Q diakhiri.
GO TO FULL VERSION