Belajar ekspresi reguler secara sistematis: artikel dasar

Penulis:Mimpi kecil, Dibuat: 2017-03-29 10:52:47, Diperbarui: 2020-11-18 12:39:53

Belajar ekspresi reguler secara sistematis: artikel dasar

Apa itu ekspresi reguler? Ekspresi reguler adalah kombinasi dari beberapa karakter tertentu yang telah didefinisikan sebelumnya, dan kombinasi dari karakter-karakter tertentu tersebut, yang membentuk sebuah string string yang disebut string rule, yang digunakan untuk mengekspresikan suatu filter logic pada string tersebut.

  • Dengan menggunakan ekspresi reguler, tujuan berikut dapat dicapai:

    给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
    可以通过正则表达式,从字符串中获取我们想要的特定部分。
    

    Untuk memudahkan Anda untuk belajar, saya akan merekomendasikan Regextor, sebuah perangkat lunak untuk memverifikasi ekspresi reguler, yang dapat Anda lihat di artikel saya, yang juga merekomendasikan banyak perangkat lunak yang bagus untuk Mac.

    img

Di bawah ini, mulailah dengan menjelaskan berbagai aturan ekspresi reguler:

  • Mencocokkan karakter teks biasa

    Ekspresi reguler hanya dapat berisi teks biasa, yang mewakili pencocokan yang tepat; misalnya:

    Pernyataan formal:songTeks untuk dicocokkan: xiao songge, xiao songge Hasil pencocokan: xiaosongGe, xiao Songge Ekspresi reguler secara default ditulis dengan huruf besar, jadi song tidak akan cocok dengan Song. Tetapi sebagian besar implementasi ekspresi reguler menyediakan opsi untuk menulis tanpa huruf besar.

  • Mencocokkan karakter acak

    . Digunakan untuk mencocokkan karakter acak, misalnya:

    Ekspresi reguler: c.t Cat cet caaat dog Hasil pencocokan:cat cetAaat dog Analisis: c.t akan mencocokkan string yang dimulai dengan "c" dan berakhir dengan "t", dengan karakter arbitrer di tengahnya.

    同理,多个连续的.可以匹配多个连续的任意字符:

    Ekspresi reguler: c...t Cat cet caat dog Hasil pencocokan: cat cetcaatanjing

  • Mencocokkan karakter khusus

    . memiliki makna khusus dalam ekspresi reguler, adalah karakter khusus.. juga karakter khusus yang dapat berperan sebagai transposisi terhadap karakter khusus.. jika Anda ingin mencocokkan adalah karakter "benar"..

    Ekspresi reguler: c.t Cat c.t dog (dalam bahasa Inggris). Hasil pencocokan: catc.tanjing Catatan: Karena \ juga merupakan karakter khusus, untuk mencocokkan karakter \ yang sebenarnya, Anda harus menggunakan dua garis miring \:

    Ekspresi reguler: c\t Menunggu teks yang cocok: cat c\t dog Hasil pencocokan: catc\tanjing

  • Menggunakan kumpulan karakter

    Seperti yang disebutkan di atas. Bisa mencocokkan karakter yang diinginkan, tetapi bagaimana jika saya ingin mencocokkan beberapa karakter tertentu? Mencocokkan sekelompok karakter tertentu dapat menggunakan [dan] meta-karakter.

    Ekspresi reguler: c[ab]t Cat cbt cet Hasil pencocokan:cat cbtCet Analisis: [ab] akan mencocokkan "a atau b . Jadi c[ab]t akan mencocokkan cat dan cbt tanpa mencocokkan cet".

  • Menggunakan spasi kelompok karakter

    Dalam contoh di atas, bagaimana jika saya ingin mencocokkan cet, apakah saya akan menambahkan satu di dalam [?] dan jika saya ingin mencocokkan huruf kecil apa pun, apakah saya akan menulis puluhan di dalamnya?

    Ekspresi reguler: c[a-z]t Cat cbt czt c2t Hasil pencocokan:cat cbt cztc2t Analisis: c[a-z]t berarti "c yang dimulai dengan c, yang berakhir dengan t", dengan huruf "a" - "z" di tengahnya.

    Situs-situs serupa juga tersedia di:

    [0-9] memiliki fungsi yang sama dengan [0123456789]. [A-F] Mencocokkan huruf besar dari A ke F. [A-Z] Mencocokkan semua huruf besar dari A sampai Z. [a-z] Mencocokkan semua huruf kecil dari a sampai z. [A-z] Mencocokkan semua karakter ASCII dari A ke ASCII z ((tidak hanya mencocokkan semua karakter, tetapi juga mencocokkan karakter di dalam tabel ASCII A ke z, seperti [ dan ^ dll) ). [A-Za-z0-9] Mencocokkan semua huruf besar dan angka.

  • Pencocokan non-set karakter

    Kumpulan karakter umumnya digunakan untuk menentukan sekelompok karakter yang ingin dicocokkan. Tetapi terkadang, Anda ingin mengecualikan sekelompok karakter yang tidak ingin Anda dicocokkan. Hal ini dapat dilakukan dengan menolak kumpulan karakter.

    Ekspresi normal: c[^a-z]t Cat cbt czt c2t cAt Hasil pencocokan: cat cbt cztc2t cAtAnalisis: Ini adalah kebalikan dari contoh sebelumnya..[a-z] mencocokkan semua huruf kecil, sedangkan [^a-z] mencocokkan semua karakter non-kecil..

    Perhatikan bahwa ^ adalah karakter yang menghapus semua karakter dalam kumpulan karakter.

  • Karakter utama

    Karakter-karakter ini memiliki makna khusus dalam ekspresi reguler, di mana kita telah mengatakan beberapa karakter-karakter utama, seperti., [dan]. Karakter-karakter ini tidak dapat secara langsung menyatakan makna mereka sendiri, misalnya, tidak dapat secara langsung menggunakan [untuk mencocokkan " [, menggunakan. untuk mencocokkan " ).

    Semua meta-karakter dapat di depan ditambah dengan pergeseran garis miring, ketika di depan, karakter akan mencocokkan dirinya sendiri dan bukan makna khususnya; misalnya, [ akan mencocokkan " [ ":

    Ekspresi reguler: a[b] Menunggu teks yang cocok: a[b ab a[[b Hasil pencocokan:a[bab a[[b Catatan: \ digunakan untuk mengubah karakter meta, yang juga berarti \ juga merupakan karakter meta. Jadi jika Anda ingin mencocokkan " \ " yang sebenarnya, Anda dapat menggunakan \:

    Ekspresi reguler: a\b Menunggu teks yang cocok: a\b a\b a[[b Hasil setelah pencocokan: a\ba\ba[[b

  • Karakter kosong

    Kadang-kadang Anda mungkin perlu mencocokkan karakter kosong yang tidak dapat dicetak dalam teks. Misalnya, Anda ingin menemukan semua karakter Tab, atau semua tanda ganti. Anda dapat menggunakan karakter khusus di bawah ini:

    img

    Sebagai contoh, \r\n akan mencocokkan kombinasi toggle-back, yang dalam Windows berarti toggle file. Pada sistem Linux dan Unix, hanya menggunakan \n saja.

  • Mencocokkan tipe karakter tertentu

    Ada beberapa metakarakter khusus yang dapat digunakan untuk mencocokkan kumpulan karakter yang biasa digunakan. Metakarakter ini disebut kelas karakter yang cocok. Anda akan menemukan mereka sangat mudah digunakan.

    Mencocokkan angka atau non-angka Seperti yang disebutkan di atas,[0-9] dapat mencocokkan semua angka. Jika Anda tidak ingin mencocokkan angka apa pun, Anda dapat menggunakan [^0-9].

    img

    Ekspresi reguler: c\dt Cat c2t czt c9t Hasil pencocokan: catc2tcztc9t

    Ekspresi reguler: c\Dt Cat c2t czt c9t Hasil pencocokan:catc2tcztc9t Mencocokkan karakter alfabet dan non-alfabet Selain itu, karakter kelas lainnya yang sering digunakan adalah \w dan \W:

    img

    Ekspresi reguler: c\wt Cat c2t czt c-t c\t Hasil pencocokan:cat c2tc-t c\ t

    Ekspresi reguler: c\Wt Menunggu teks yang cocok: cat c2t c-t c\t Hasil pencocokan: cat c2tc-t c\tMencocokkan kosong dan tidak kosong Kelas pencocokan terakhir yang akan kita temui adalah kelas kosong:

    img

    Ekspresi reguler: c\st Cat c t c2t c \ t Hasil pencocokan: catc tc2t c\ t

    Ekspresi reguler: c\St Cat c t c2t c \ t Hasil pencocokan:catc tc2t c\t

  • Mencocokkan satu atau lebih karakter

    + meta-karakter berarti mencocokkan satu atau lebih karakter. Misalnya, a akan mencocokkan "a", sedangkan a + mencocokkan satu atau lebih "a".

    Cat adalah bentuk dari kata cat. Cat Cat Caat Caat Cat Cat Caat Hasil pencocokan: ctcatKaat Kaat

    Ekspresi normal: ca + t Cat Cat Caat Caat Cat Cat Caat Hasil pencocokan: ctcat caat caaatKetika menggunakan + pada himpunan karakter, Anda perlu menempatkan simbol + di luar himpunan:

    Ekspresi normal: c[0-9] + t Menunggu teks yang cocok: ct c0t cat c123t Hasil pencocokan: ctc0tkucingc123tAnalisis: c[0-9]+t menunjukkan string yang dimulai dengan "c" dan berakhir dengan "t" dengan satu atau lebih angka di tengahnya.

    Tentu saja, [0-9+] juga merupakan ekspresi reguler yang sah, tetapi ini menunjukkan himpunan karakter yang berisi simbol "0" - "9" dan "+".

    Secara umum, meta-karakter seperti. dan + digunakan sebagai makna harfiah ketika digunakan dalam kumpulan karakter, sehingga tidak perlu ditransformasikan. Tetapi tidak apa-apa untuk ditransformasikan, jadi fungsi [0-9+] dan [0-9+] sama.

    Catatan: + adalah karakter meta, dan untuk mencocokkan "+" perlu menggunakan kata ganti +。

  • Mencocokkan 0 atau lebih karakter

    Jika Anda ingin mencocokkan nol atau lebih karakter, Anda dapat menggunakan karakter * meta.

    Ekspresi normal: ca*t Tetap cocok teks: ct cat caat cbt Hasil pencocokan:ct cat caatcbt Catatan: (*) Simbol adalah meta-karakter. Untuk dapat mencocokkan "*", perlu melakukan transformasi *.

  • Mencocokkan nol atau satu karakter

    ? mencocokkan nol atau satu karakter. Jadi,? sangat cocok untuk mencocokkan karakter pilihan dalam teks.

    Ekspresi formal: ca?t Tetap cocok teks: ct cat caat cbt Hasil pencocokan:ct catCaat cbt Catatan:? simbol adalah meta-karakter.? Untuk dapat mencocokkan "? ", perlu melakukan transformasi?.

  • Menggunakan jumlah pertandingan

    Ekspresi normal memungkinkan untuk menentukan jumlah kali pencocokan. Jumlah dapat ditentukan di antara { dan } . Catatan: { dan } juga meta-karakter, dan perlu diterjemahkan ketika menggunakan arti harfiah.

    Jumlah pencocokan yang tepat Untuk menentukan jumlah kali yang akan dicocokkan, Anda dapat memasukkan angka di antara { dan}. Misalnya, {3} akan mencocokkan karakter atau set yang muncul 3 kali sebelumnya:

    Ekspresi reguler: ca{3}t Tulisannya: ct cat caaat cbt Hasil pencocokan: ct catcaaatcbt Setidaknya jumlah yang cocok Kita juga dapat menentukan hanya nilai minimum yang cocok. Misalnya, {2,} berarti cocok 2 kali atau lebih:

    Ekspresi normal: ca{1,} t Tulisannya: ct cat caaat cbt Hasil pencocokan: ctcat caaatcbt Pencocokan interval pangkat Kita juga dapat menggunakan nilai minimum dan maksimum untuk menentukan jumlah pencocokan. Misalnya, {2,3} berarti minimal 2 pencocokan dan maksimal 3 pencocokan.

    Pernyataan normal: ca{2,3} t Tulisannya: ct cat caaat cbt Hasil pencocokan: ct catcaaatcbt Jadi? dan fungsi dari {0,1} adalah sama + dan fungsi dari {1,} adalah sama.

  • Pencocokan yang tidak serakah

    Perhatikan contoh-contoh berikut:

    Ekspresi reguler: s.*g Tetap Menandingi Teks: xiao song xiao song Hasil pertandingan: xiao song xiao song Analisis: s.*g tidak mencocokkan dua "song" seperti yang diharapkan, tetapi mencocokkan semua teks antara "s" pertama dan "g" terakhir.

    Ini karena * dan + adalah pencocokan serakah. Artinya, ekspresi reguler selalu mencari pencocokan terbesar, bukan terkecil, yang dirancang dengan sengaja.

    Tetapi jika Anda tidak ingin pencocokan serakah, gunakan pencocokan non-serakah dari kata-kata pengukuran ini (mencocokkan sebanyak mungkin karakter).

    img

    Ya?Jika Anda tidak memiliki akun Facebook, maka Anda dapat menggunakan *? untuk mengubah contoh di atas:

    正则表达式:s.Apa itu? Tulisannya: xiao song xiao song Hasil pencocokan: xiaosongxiaosong 分析:可以看到s.? g cocok dengan dua "song" ‖

  • Mendefinisikan batas string

    Meta-karakter yang cocok dengan batas string adalah ^ dan $, yang digunakan untuk awal dan akhir string masing-masing.

    ^ Penggunaan:

    Ekspresi formal: ^ xiao

    Menunggu teks yang cocok:xiaosong Hasil pencocokan:xiaolagu

    Menunggu teks yang cocok: axiaosong Hasil pencocokan: Axiaosong Analisis: ^ xiao mencocokkan string yang dimulai dengan " xiao ".

    $ digunakan sebagai berikut:

    Ungkapan yang benar: song$

    Menunggu teks yang cocok:xiaosong Hasil pencocokan: xiaosong

    Menunggu teks yang cocok:xiaosonga Hasil pencocokan: Xiaosonga Analisis: song$ mencocokkan string yang berakhir dengan "song".

    Penggunaan bersama:

    Ini adalah ekspresi normal: ^ [0-9a-zA-Z] {4,} $

    Menunggu teks yang cocok: a1b234ABC Hasil pencocokan:a1b234ABC

    Teks yang akan dicocokkan: + a1b23 = 4ABC Hasil pencocokan: + a1b23 = 4ABC Analisis: ^[0-9a-zA-Z]{4,} $ cocok terdiri dari angka atau huruf, dan jumlah digit lebih besar dari string empat digit yang sama.

    Catatan: ^ jika berada di awal himpunan, berarti negatif; jika berada di luar himpunan, maka akan mencocokkan posisi awal string. Semua orang dapat mencoba perbedaan antara [^0-9] dan ^[0-9].

  • Menggunakan mode multi-baris

    Namun, mode multi-baris dapat diaktifkan. Dalam mode multi-baris, mesin ekspresi reguler akan mengganti tanda baris sebagai pembatas string, ^ akan mencocokkan awal teks atau awal baris, dan $ dapat mencocokkan akhir teks atau akhir baris.

    Perbaiki contoh sebelumnya:

    Ekspresi reguler: ((?m) ^ [0-9a-zA-Z]{4,}$

    Menunggu teks yang cocok: a1b234ABC + a1b23 = 4ABC ABC123456

    Hasil pencocokan:a1b234ABC+a1b23=4ABCABC123456Analisis: ((?m) ^ [0-9a-zA-Z]{4,} $ akan mencocokkan setiap baris yang terdiri dari angka atau huruf, dan digitnya lebih besar dari string empat digit yang sama.

    Catatan: Jika menggunakan pola multi-baris, ((?m) harus ditempatkan di awal ekspresi reguler. (?m) tidak didukung di sebagian besar implementasi ekspresi reguler. Beberapa implementasi ekspresi reguler juga mendukung penggunaan awal string yang cocok dengan \A dan akhir string yang cocok dengan \Z. Jika didukung, maka fungsi metatarsal ini sama dengan ^, $. Tetapi metatarsal ini tidak dapat menggunakan modifikasi (?m) dan oleh karena itu tidak dapat digunakan dalam mode multi-baris.

Setelah membaca artikel ini, Anda dapat membaca artikel berikutnya tentang cara mempelajari ekspresi reguler secara sistematis:

Dikutip dari buku iOS_Chosunoko


Lebih banyak