Wednesday 23 September 2015

Java - Regular Expressions

Java menyediakan paket java.util.regex untuk pencocokan pola dengan ekspresi reguler. Java kalimat biasa yang sangat mirip dengan bahasa pemrograman Perl dan sangat mudah untuk belajar.

Sebuah ekspresi reguler adalah urutan khusus karakter yang membantu Anda mencocokkan atau menemukan string lain atau set string, menggunakan sintaks khusus yang diselenggarakan di pola. Mereka dapat digunakan untuk mencari, mengedit, atau memanipulasi teks dan data.

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

Pola Kelas: Sebuah benda pola adalah representasi dikompilasi dari ekspresi reguler. Kelas Pola tidak memberikan konstruktor publik. Untuk membuat pola, Anda harus terlebih dahulu memanggil salah satu dari kompilasi statis publik () metode, yang kemudian akan kembali objek Pola. Metode ini menerima ekspresi reguler sebagai argumen pertama.

Kelas matcher: Sebuah benda matcher adalah mesin yang menafsirkan pola dan melakukan operasi pertandingan melawan string masukan. Seperti kelas Pola, matcher mendefinisikan ada konstruktor publik. Anda mendapatkan objek matcher dengan menerapkan metode matcher () pada objek Pola.

PatternSyntaxException: Sebuah benda PatternSyntaxException adalah pengecualian dicentang yang menunjukkan kesalahan sintaks dalam pola ekspresi reguler.

Menangkap Grup:
Kelompok Menangkap adalah cara untuk mengobati beberapa karakter sebagai satu kesatuan. Mereka diciptakan dengan menempatkan karakter yang akan dikelompokkan dalam satu set tanda kurung. Misalnya, ekspresi reguler (anjing) membuat grup yang berisi huruf "d", "o", dan "g".

Kelompok menangkap diberi nomor dengan menghitung kurung pembukaan mereka dari kiri ke kanan. Dalam ekspresi ((A) (B (C))), misalnya, ada empat kelompok seperti:

((A) (B (C)))

(A)

(B (C))

(C)

Untuk mengetahui berapa banyak kelompok yang hadir dalam ekspresi, memanggil metode groupCount pada objek matcher. Metode groupCount mengembalikan sebuah int menunjukkan jumlah menangkap kelompok hadir dalam pola matcher ini.

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

Contoh:
Berikut contoh menggambarkan bagaimana menemukan string digit dari string alfanumerik yang diberikan:

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");
      }
   }
}

akan menghasilkan :

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

Regular Expression Sintaks:
Berikut adalah tabel daftar turun semua ekspresi sintaks metakarakter reguler yang tersedia di Java:

^
Pertandingan dimulai dari garis.

$
 Pertandingan akhir baris.
. Cocok setiap karakter tunggal kecuali baris baru. Menggunakan m opsi memungkinkan untuk mencocokkan baris baru juga.

[...]
 Cocok dengan satu karakter apapun dalam tanda kurung.

[^ ...]
 Cocok dengan satu karakter apapun tidak dalam tanda kurung

\ A
 Awal seluruh string

\ z
 Akhir seluruh string

\ Z
 Akhir seluruh string kecuali diijinkan terminator garis akhir.

re *
 Cocok 0 atau lebih kejadian dari sebelumnya ekspresi.

re
 + Cocok 1 atau lebih dari hal sebelumnya
kembali? Cocok 0 atau 1 terjadinya sebelumnya ekspresi.

re {n}
 Cocok persis jumlah n kejadian dari sebelumnya ekspresi.

re {n,}
Cocok n atau lebih kejadian dari sebelumnya ekspresi.

re {n, m}
 Cocok setidaknya n dan paling m kejadian sebelumnya ekspresi.

a | b
 Cocok baik atau b.

(re)
 Grup ekspresi reguler dan mengingat teks yang cocok.

(:? Re)
 Grup ekspresi reguler tanpa mengingat teks yang cocok.

(?> Re)
 Cocok pola mandiri tanpa backtracking.

\ w
 Cocok karakter kata.

\ W
 Cocok karakter nonword.

\ s
 Cocok spasi. Setara dengan [\ t \ n \ r \ f].

\ S
 Cocok nonwhitespace.

\ d
 Cocok digit. Setara dengan [0-9].

\ D
 Cocok nondigits.

\ A
 Pertandingan dimulai string.

\ Z
 Cocok akhir string. Jika baris baru ada, cocok sebelum baris baru.

\ z
 Cocok akhir string.

\ G
 Cocok titik di mana pertandingan terakhir selesai.

\ n
 Back-referensi untuk menangkap nomor kelompok "n"

\ b
 Cocok batas kata ketika kurung luar. Cocok backspace (0x08) saat berada di dalam kurung.

\ B
 Cocok batas nonword.

\ n, \ t, dll
 Cocok baris, tombol kembali, tab, dll

\ Q
Luput (kutipan) semua karakter hingga \ E

\ E
Berakhir mengutip dimulai dengan \ Q


Metode Kelas matcher:
Berikut adalah daftar metode instan berguna:

Indeks Metode:
Metode indeks memberikan nilai indeks berguna yang menunjukkan tepat di mana pertandingan itu ditemukan dalam string masukan:

1 start int publik ()
Mengembalikan index awal pertandingan sebelumnya.

2 start int publik (kelompok int)
Mengembalikan index awal subsequence ditangkap oleh kelompok diberikan selama operasi pertandingan sebelumnya.

3 int akhir public ()
Mengembalikan offset setelah karakter terakhir cocok.

4 end public int (kelompok int)
Mengembalikan offset setelah karakter terakhir dari subsequence ditangkap oleh kelompok diberikan selama operasi pertandingan sebelumnya.

Metode penelitian:
Metode penelitian meninjau input string dan kembali Boolean yang menunjukkan apakah atau tidak pola ditemukan:

Metode dengan Deskripsi

 public boolean lookingat ()
Upaya untuk mencocokkan urutan masukan, mulai dari awal daerah, terhadap pola.

 public boolean find ()
Upaya untuk menemukan subsequence berikutnya dari urutan input yang sesuai pola.

 public boolean find (int start)
Ulang matcher ini dan kemudian mencoba untuk menemukan subsequence berikutnya dari urutan input yang sesuai dengan pola, mulai dari indeks tertentu.

 pertandingan public boolean ()
Upaya untuk mencocokkan seluruh wilayah terhadap pola.

Metode pengganti:
Metode penggantian metode yang berguna untuk mengganti teks dalam input string:

Metode dengan Deskripsi

public matcher appendReplacement (StringBuffer sb, String pengganti)
Menerapkan append-dan-ganti langkah non-terminal.

publik StringBuffer appendTail (StringBuffer sb)
Mengimplementasikan terminal menambahkan-dan-ganti langkah.

public String replaceAll (String pengganti)
Menggantikan setiap subsequence dari urutan masukan yang cocok dengan pola dengan penggantian string yang diberikan.

String public replaceFirst (String pengganti)
Menggantikan subsequence pertama dari urutan input yang sesuai dengan pola dengan penggantian string yang diberikan.

public static String quoteReplacement (String s)
Pengembalian pengganti String literal untuk String yang ditentukan. Metode ini menghasilkan sebuah String yang akan bekerja sebagai pengganti s literal dalam metode appendReplacement kelas matcher.

Awal dan akhir Metode:
Berikut ini adalah contoh yang menghitung berapa kali kata "kucing" muncul dalam string masukan:

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());
      }
   }
}

akan menghasilkan :

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

Anda dapat melihat bahwa contoh ini menggunakan batas kata untuk memastikan bahwa huruf "c" "a" "t" yang bukan hanya substring dalam kata lagi. Hal ini juga memberikan beberapa informasi yang berguna tentang di mana dalam string masukan pertandingan telah terjadi.

Metode start mengembalikan indeks awal subsequence ditangkap oleh kelompok diberikan selama operasi pertandingan sebelumnya, dan akhirnya mengembalikan indeks dari karakter terakhir yang cocok, ditambah satu.

Pertandingan dan Metode lookingat:
Pertandingan dan metode lookingat baik upaya untuk mencocokkan urutan masukan terhadap pola. Perbedaannya, bagaimanapun, adalah bahwa pertandingan membutuhkan urutan input seluruh dicocokkan, sementara lookingat tidak.

Kedua metode selalu mulai dari awal string masukan. Berikut adalah contoh yang menjelaskan fungsi:

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());
   }
}

akan menghasilkan :

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

The replaceFirst dan replaceAll Metode:
The replaceFirst dan replaceAll metode mengganti teks yang sesuai dengan ekspresi reguler yang diberikan. Seperti nama mereka menunjukkan, replaceFirst menggantikan kejadian pertama, dan replaceAll menggantikan semua kejadian.

Berikut adalah contoh yang menjelaskan fungsi:

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);
   }
}

akan menghasilkan :

The cat says meow. All cats say meow.

The append Penggantian dan menambahkan Metode Tail:
Kelas matcher juga menyediakan menambahkan Penggantian dan menambahkan metode Tail untuk penggantian teks.

Berikut adalah contoh yang menjelaskan fungsi:

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());
   }
}

akan menghasilkan :

-foo-foo-foo-

Pola Sintaks Exception Kelas Metode:
Sebuah Pola Sintaks Exception adalah pengecualian dicentang yang menunjukkan kesalahan sintaks dalam pola ekspresi reguler. Pola Sintaks Exception kelas menyediakan metode berikut untuk membantu Anda menentukan apa yang salah:


public String getDescription ()
Mengambil deskripsi kesalahan.

int getIndex publik ()
Mengambil indeks kesalahan.

String public getPattern ()
Mengambil pola ekspresi reguler yang salah.

public String getMessage ()
Mengembalikan string multi-line yang berisi deskripsi kesalahan sintaks dan indeks, pola ekspresi reguler yang salah, dan indikasi visual dari indeks kesalahan dalam pola.

1 comment:

  1. cara buat kotak script seperti notepad++ gitu gmn mas?

    ReplyDelete