Seperti yang kita semua ketahui, dalam pengembangan program, tidak dapat dihindari untuk menghadapi situasi di mana string perlu dicocokkan, dicari, diganti, dan dinilai. Situasi ini terkadang lebih rumit. Jika diselesaikan dalam pengkodean murni, itu akan sering menyia -nyiakan waktu dan energi pemrogram. Oleh karena itu, belajar dan menggunakan ekspresi reguler telah menjadi cara utama untuk menyelesaikan kontradiksi ini.
Seperti yang kita semua tahu, ekspresi reguler adalah spesifikasi yang dapat digunakan untuk pencocokan pola dan penggantian. Ekspresi reguler adalah pola literal yang terdiri dari karakter biasa (seperti karakter A hingga Z) dan karakter khusus (MetaCharacters). Ini digunakan untuk menggambarkan satu atau lebih string untuk dicocokkan saat mencari tubuh literal. Ekspresi reguler bertindak sebagai templat untuk mencocokkan pola karakter dengan string yang dicari.
Sejak JDK1.4 meluncurkan paket java.util.regex, telah memberi kami platform aplikasi ekspresi reguler Java yang baik.
Karena ekspresi reguler adalah sistem yang sangat kompleks, saya hanya akan memberikan beberapa contoh konsep pengantar. Untuk informasi lebih lanjut, silakan merujuk ke buku terkait dan menjelajahinya sendiri.
// Backslash
/t interval ('/u0009')
/n line break ('/u000a')
/r enter ('/u000d')
/D Nomor setara dengan [0-9]
/D non-digit setara dengan [^0-9]
Simbol kosong [/t/n/x0b/f/r]
Simbol non-blank [^/t/n/x0b/f/r]
/w karakter individu [a-za-z_0-9]
/W karakter non-individu [^a-za-z_0-9]
Istirahat halaman
Escape
/b batas kata
/B batas non-kata
/G akhir pertandingan sebelumnya
^ dimulai dengan batas
^Batas kondisi java adalah karakter yang dimulai dengan java
$ adalah akhir dari batas
Batas kondisi Java $ adalah karakter java-end
. Batas bersyarat setiap karakter tunggal kecuali /n
java .. setelah batas kondisi adalah java, dua karakter kecuali untuk garis baru
Tambahkan pembatasan spesifik "[]"
Kondisi [AZ] terbatas pada karakter dalam rentang kecil A ke Z
Kondisi [AZ] terbatas pada satu karakter dalam kisaran atas A ke Z
Kondisi [A-ZA-Z] terbatas pada karakter dalam huruf kecil A ke Z atau Range Atas A ke Z
[0-9] Kondisi terbatas pada satu karakter dalam rentang kecil 0 hingga 9
Kondisi [0-9A-Z] terbatas pada huruf kecil 0 hingga 9 atau rentang z
[0-9 [AZ]] Kondisi terbatas pada huruf kecil 0 hingga 9 atau kisaran Z (persimpangan)
[] dan tambahkan kondisi pembatasan "[^]" lagi
Kondisi [^az] terbatas pada karakter dalam kisaran non-lowercase A hingga z
[^Az] Kondisi membatasi satu karakter dalam kisaran non-caps a to z
Kondisi [^a-za-z] terbatas pada karakter dalam kisaran non-lowercase A hingga z atau atas A ke z
[^0-9] Kondisi terbatas pada satu karakter dalam kisaran non-lowercase 0 hingga 9
[^0-9A-Z] Kondisi terbatas pada karakter dalam kisaran non-lowercase 0 hingga 9 atau A ke Z
[^0-9 [az]] Kondisi terbatas pada karakter dalam kisaran non-lowercase 0 hingga 9 atau A ke Z (persimpangan)
Ketika kondisi pembatasan adalah bahwa karakter tertentu muncul lebih dari 0 kali, Anda dapat menggunakan "*"
J* lebih dari 0 J
.* Karakter apa pun di atas 0
J.*DJ dan D APA PUN 0 Karakter
Ketika kondisi pembatasan adalah bahwa karakter tertentu muncul lebih dari sekali, Anda dapat menggunakan "+"
J+ 1 atau lebih j
.+ 1 atau lebih karakter sewenang -wenang
J.+1 atau lebih karakter antara DJ dan D
Ketika kondisi pembatasan adalah karakter tertentu muncul 0 atau lebih kali, "?" dapat digunakan.
JA? J atau JA muncul
Batas untuk kejadian kontinu dari karakter bilangan yang ditentukan "{a}"
J {2} jj
J {3} jjj
Lebih dari satu teks, dan "{a,}"
J {3,} jjj, jjjjj, jjjjj, ??? (J hidup berdampingan lebih dari 3 kali)
Lebih dari satu teks, kurang dari b "{a, b}"
J {3,5} jjj atau jjjj atau jjjjj
Ambil salah satu dari keduanya
J | aj atau a
Java | halo java atau halo
"()" menentukan jenis kombinasi, misalnya, jika saya meminta data antara <a href =/"index.html/"> index </a>, saya dapat menulis <a.*href =/".*/"> (.+?) </a>
Saat menggunakan fungsi Pola.compile, Anda dapat menambahkan parameter yang mengontrol perilaku pencocokan ekspresi reguler:
Pola pola.compile (string regex, int bendera)
Kisaran nilai bendera adalah sebagai berikut:
Pola.canon_eq kecocokan ditentukan jika dan hanya jika "dekomposisi kanonik" dari dua karakter persis sama. Misalnya, setelah menggunakan bendera ini, ungkapan "A/U030A" akan cocok "?". Secara default, "kesetaraan kanonik" tidak dipertimbangkan.
Pattern.Case_insensitive (? I) Secara default, pencocokan case-tidak diidentifikasi hanya tersedia untuk set karakter AS-ASCII. Bendera ini memungkinkan ekspresi untuk mengabaikan case untuk pencocokan. Untuk mencocokkan karakter unicode dengan ukuran yang tidak diketahui, cukup gabungkan unicode_case dengan bendera ini.
Pola.comments (? X) Dalam mode ini, karakter ruang (dalam ekspresi reguler) akan diabaikan saat mencocokkan (catatan penerjemah: tidak merujuk pada "// s" dalam ekspresi, tetapi mengacu pada spasi, tab, carriage return, dll.) Dalam ekspresi. Komentar dimulai dari # dan berakhir di baris ini. Mode baris unix dapat diaktifkan melalui bendera tertanam.
Pola.dotall (? S) dalam mode ini, ekspresi '.' dapat mencocokkan karakter apa pun, termasuk karakter akhir yang mewakili garis. Secara default, ekspresi '.' tidak cocok dengan karakter akhir dari garis.
Pola.multiline
(? m) Dalam mode ini, '^' dan '$' cocok dengan awal dan akhir baris masing -masing. Selain itu, '^' masih cocok dengan awal string, dan '$' juga cocok dengan akhir string. Secara default, kedua ekspresi ini hanya cocok dengan awal dan akhir string.
Pattern.unicode_case
(? U) Dalam mode ini, jika Anda juga mengaktifkan bendera case_insensitive, itu akan cocok dengan karakter unicode dengan case yang tidak dikenal. Secara default, pencocokan case-tidak sensitif hanya tersedia untuk set karakter AS-ASSASII.
Pola.unix_lines (? D) Dalam mode ini, hanya '/n' dianggap sebagai aborsi garis dan cocok '.', '^', Dan '$'.
Mengesampingkan konsep kosong, berikut adalah beberapa kasus penggunaan reguler Java sederhana:
◆ Misalnya, saat string berisi verifikasi
// Temukan string yang dimulai dengan java dan berakhir pada pola will pola = pola.compile ("^java.*"); Pencocokan pencocokan = pola.matcher ("java bukan manusia"); boolean b = matcher.matches (); // Ketika kondisinya terpenuhi, itu akan mengembalikan true, jika tidak salah System.out.println (b); ◆ Saat membelah string dengan beberapa kondisi
Pola pola = pola.compile ("[, |]+"); string [] strs = pola.split ("java hello world java, halo ,, dunia | sun"); untuk (int i = 0; i <strs.length; i ++) {System.out.println (strs [i]);} ◆ Penggantian teks (karakter muncul untuk pertama kalinya)
Pola pola = pola.compile ("ekspresi reguler"); Matcher Matcher = Pattern.matcher ("Ekspresi Reguler Hello World, Ekspresi Reguler Hello World"); // Ganti data pertama yang sesuai dengan System Regularity.out.println (Matcher.Replacefirst ("Java")); ◆ Penggantian teks (semua)
Pola pola = pola.compile ("ekspresi reguler"); Matcher Matcher = Pattern.matcher ("Ekspresi reguler Hello World, Expression Hello World"); // Ganti data pertama yang sesuai dengan System Rep regureity.out.println (Matcher.replaceall ("java")); ◆ Penggantian teks (ganti karakter)
Pola pola = pola.compile ("ekspresi reguler"); pencocokan pencocokan = pola.matcher ("ekspresi reguler hello world, ekspresi reguler hello world"); stringbuffer sbr = new stringBuffer (); while (matcher.find ()) {Matcher.AppendReplacement (sbr, "java");} matcher.applettail (sbr); system.out.println (sbr.toString ());◆ Verifikasi apakah itu alamat email
String str = "[email protected]"; pola pola = pola.compile ("[// w //.//-apus+@($ mendengar// w //-ubungi//.)++// w //-]+", pola.case_insensitive); pencocokan pencocokan = pola.
◆ Hapus tag HTML
Pola pola = pola.compile ("<.+?>", Pola.dotall); pencocokan pencocokan = pola.matcher ("<a href =/" index.html/"> home </a>"); string string = matcher.replaceall (""); System.out.println (string); ◆ Temukan string kondisi yang sesuai di HTML
Pola pola = pola.
◆ Intercept http: // alamat
// intercept urlpattern Pattern = pola.compile ("(http: // | https: //) {1} [//w////-//:]+"); pencocokan matcher = pola.matcher ("dsdsds <http: // dsds // gfgffdfd> fdfer"; while (matcher.find ()) {buffer.append (matcher.group ()); buffer.append ("/r/n"); System.out.println (buffer.toString ());}◆ Ganti karakter Cina {} yang ditentukan
String str = "Riwayat pengembangan saat ini dari Java berasal dari {0} tahun - {1} tahun"; string [] [] objek = {string baru [] {"// {0 //}", "1995"}, string baru [] {"// {1 //}", "2007"}}} {"// {1 // sourcestring, objek [] objek) {string temp = sourcestring; untuk (int i = 0; i <object.length; i ++) {string [] result = (string []) objek [i]; Pola pola = pola.compile (hasil [0]); Pencocokan pencocokan = pola.matcher (temp); temp = matcher.replaceall (hasil [1]); } return temp;}◆ File kueri di direktori yang ditunjuk dengan kondisi reguler
// Digunakan untuk men -cache daftar file private arraylist = new arraylist (); // Digunakan untuk meng -host jalur file Private String _Path; // Digunakan untuk meng -host rumus pribadi reguler string _regexp; kelas myFileFilter mengimplementasikan filefilter { / *** cocok dengan nama file* / public boolean accept (file file) {coba {pola pola = pola.compile (_regexp); Matcher match = pola.matcher (file.getName ()); return match.matches (); } catch (Exception e) {return true; }}} / *** Analisis aliran input* input @param* / fileSanAnyze (jalur string, string regexp) {getFileName (path, regexp); } /** * Analisis nama file dan tambahkan file * @param input * /private void getFileName (string path, string regexp) {// directory_path = path; _regexp = regexp; File Directory = File Baru (_Path); File [] FileFile = Directory.ListFiles (myFileFilter baru ()); if (fileFile == null) return; untuk (int j = 0; j <filefile.length; j ++) {file.add (fileFile [j]); } kembali; } / *** Tampilkan informasi output* @param out* / public void print (printStream out) {iterator elemen = file.iterator (); while (elements.hasnext ()) {file file = (file) elements.next (); out.println (file.getPath ()); }} public static void output (string path, string regexp) {fileSanalyze FileGroup1 = new fileSanAnyze (path, regexp); FileGroup1.print (System.out); } public static void main (string [] args) {output ("c: //", "[az |.]*"); }Ada banyak fungsi keteraturan Java. Bahkan, selama itu adalah pemrosesan karakter, tidak ada yang tidak dapat dilakukan oleh keteraturan. (Tentu saja, butuh banyak waktu untuk menjelaskannya secara teratur ||| ...)
Di atas adalah informasi yang memilah ekspresi reguler Java. Kami akan terus menambahkan informasi yang relevan di masa mendatang. Terima kasih atas dukungan Anda untuk situs ini!