JavaRush /Blog Java /Random-MS /Ungkapan Biasa di Jawa
terranum
Tahap
Milan

Ungkapan Biasa di Jawa

Diterbitkan dalam kumpulan
RegExUngkapan biasa ialah sejenis corak yang boleh digunakan pada teks (String, dalam Java). Java menyediakan pakej java.util.regex untuk memadankan ungkapan biasa. Ungkapan biasa sangat serupa dengan bahasa pengaturcaraan Perl dan sangat mudah dipelajari. Ungkapan biasa sama ada sepadan dengan teks (sebahagian daripadanya) atau tidak. * Jika ungkapan biasa sepadan dengan sekeping teks, maka kita boleh mencarinya. ** Jika ungkapan biasa adalah gabungan, maka kita boleh mengetahui dengan mudah bahagian mana ungkapan biasa sepadan dengan bahagian teks mana.

Contoh pertama

Ungkapan biasa " [a-z] +" sepadan dengan semua huruf kecil dalam teks. [a-z]bermaksud mana-mana watak dari ahingga zinklusif, dan +bermaksud "satu atau lebih" aksara. Katakan kita membekalkan rentetan "kod 2 belajar tutorial java". Bagaimana untuk melakukan ini dalam Java Pertama, anda mesti membuat templat:
import java.util.regex.*;
Pattern p = Pattern.compile([a-z]+);
Seterusnya anda perlu mencipta matcheruntuk teks dengan menghantar mesej pada rajah:
Matcher m = p.matcher(“code 2 learn java tutorial”);
NOTA: Kedua-duanya tidak mempunyai pembina Pattern, Matcherkami menciptanya menggunakan kaedah kelas Pattern. Pattern Class:Objek kelas membentuk perwakilan ungkapan biasa. Kelas Corak tidak menyediakan sebarang pembina awam. Untuk membuat templat, anda mesti terlebih dahulu memanggil salah satu kaedah statik awam, yang kemudiannya mengembalikan objek kelas Pattern. Kaedah ini mengambil ungkapan biasa sebagai hujah. Matcher Class:Objek Finder ialah enjin yang mentafsir corak dan melakukan operasi padanan pada rentetan input. Seperti Patternkelas, Matcheria tidak mempunyai pembina awam. Anda mendapat objek Matcherdengan memanggil kaedah matcherpada objek kelas Pattern. Sebaik sahaja kami telah menyelesaikan langkah-langkah ini, dan kini kami mempunyai contoh kelas Matcher m , kami kini boleh menyemak sama ada corak itu ditemui atau tidak, dan jika ya, pada kedudukan apa, dsb. m.matches()mengembalikan benar jika corak sepadan dengan keseluruhan rentetan, sebaliknya palsu. m.lookingAt()mengembalikan benar jika corak sepadan dengan permulaan rentetan, palsu sebaliknya. m.find ()kembali benar jika corak sepadan dengan mana-mana bahagian teks.
Apa lagi yang perlu dibaca:

Kumpulan Pembangun Java:

Mencari jodoh

Selepas perlawanan yang berjaya, m.start() akan mengembalikan indeks aksara pertama yang dipadankan dan m.end() akan mengembalikan indeks aksara terakhir yang dipadankan, ditambah satu. Jika percubaan yang tidak berjaya dibuat dan tiada perlawanan ditemui, m.start()mereka m.end()akan melontarIllegalStateException
  • Ini RuntimeExceptionsupaya anda tidak perlu menangkapnya.
Ia mungkin kelihatan pelik untuk m.end()mengembalikan indeks aksara terakhir yang dipadankan tambah satu, tetapi itulah yang kebanyakannya String.
  • Sebagai contoh,“Now is the time“.substring(m.start(), m.end())
akan mengembalikan rentetan yang sama. Mari kita lihat kod:
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*

Kaedah Tambahan

Jika ada perlawanan, maka:
  • m.replaceFirst(replacement)mengembalikan rentetan baharu, di mana subrentetan pertama yang sepadan dengan corak akan digantikanreplacement
  • m.replaceAll(replacement)mengembalikan rentetan baharu, di mana setiap subrentetan yang sepadan dengan corak akan diganti
  • m.find(StartIndex)cari padanan seterusnya bermula pada indeks yang ditentukan
  • m.reset()menetapkan semula templat
  • m.reset(NewText)menetapkan semula pencari, dan memberikannya teks baharu (mungkin String, StringBufferatau CharBuffer)

Sintaks ungkapan biasa

  • ^Padan dengan permulaan baris.
  • $Padan dengan hujung rentetan.
  • .Padan dengan mana-mana aksara tunggal kecuali baris baharu. Menggunakan pilihan m membolehkan ia sepadan dengan baris baharu.
  • [...]Memadankan mana-mana aksara tunggal dalam kurungan.
  • [^ ...]Memadankan mana-mana aksara tunggal yang tiada dalam kurungan.
  • \AMulakan keseluruhan baris.
  • \zTamat keseluruhan baris.
  • \ZPenghujung keseluruhan baris kecuali penamat baris akhir.
  • re*Memadankan 0 atau lebih kejadian bagi ungkapan sebelumnya.
  • re+Satu atau lebih padanan ungkapan sebelumnya.
  • re?Memadankan 0 atau 1 dengan lokasi ungkapan sebelumnya.
  • re{n}Padan dengan tepat N Bilangan kejadian bagi ungkapan sebelumnya.
  • re{n,}Padan dengan N atau lebih kejadian bagi ungkapan sebelumnya.
  • re{n, m}Memadankan sekurang-kurangnya n dan paling banyak m kejadian bagi ungkapan sebelumnya.
  • a|bPadanan a atau b.
  • (re)Sekumpulan ungkapan biasa dan mengingati teks yang ditemui.
  • (?: re)Kumpulan ungkapan biasa yang tidak mengingati teks yang ditemui.
  • (?> re)Memadankan corak bebas tanpa pulangan.
  • \wMemadankan huruf dan nombor [a-zA-Z_0-9].
  • \WIni bukan huruf atau nombor.
  • \sPadan dengan ruang. Bersamaan dengan [\t\n\r\f].
  • \SBukan aksara ruang putih.
  • \dPadan dengan nombor. Bersamaan dengan [0-9].
  • \DTidak sepadan dengan nombor.
  • \GPadan dengan mata perlawanan terakhir.
  • \nPadan dengan baris baharu.
  • \bPadankan pada sempadan perkataan.
  • \BPadanan bukan pada sempadan perkataan.
  • \n, \t, etc.Aksara baris baharu, pemulangan pengangkutan, tab, dsb.
  • \QPetikan semua aksara sebelum \E.
  • \EPetikan dimulakan dengan \Q berakhir.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION