Belajar ekspresi biasa secara sistematik: asas

Penulis:Mimpi kecil, Dicipta: 2017-03-29 10:52:47, Dikemas kini: 2020-11-18 12:39:53

Belajar ekspresi biasa secara sistematik: asas

Apakah ungkapan biasa? Ekspresi biasa adalah beberapa watak tertentu yang telah ditakrifkan terlebih dahulu, dan kombinasi watak-watak tertentu itu, yang membentuk serangkaian senar aturan yang digunakan untuk menyatakan logik penapisan pada senar.

  • Dengan menggunakan ungkapan biasa, tujuan berikut dapat dicapai:

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

    Untuk memudahkan semua orang untuk belajar, saya mengesyorkan Regextor, perisian yang mengesahkan ungkapan biasa, dan artikel saya yang mengesyorkan banyak perisian yang baik untuk Mac.

    img

Di bawah ini adalah perincian mengenai pelbagai peraturan untuk ungkapan biasa:

  • Mencocokkan aksara teks biasa

    Ungkapan biasa hanya boleh mengandungi teks biasa, yang mewakili untuk mencocokkan teks ini dengan tepat; sebagai contoh:

    Perkataan biasa:songMenunggu teks yang sepadan: xiao songge, xiao songge Hasil pencocokan: xiaosongGe, xiao Songge Ekspresi biasa secara lalai ditulis dengan huruf besar, jadi song tidak akan sepadan dengan Song. Tetapi kebanyakan pelaksanaan ekspresi biasa menyediakan pilihan untuk menyatakan tidak membesarkan huruf besar.

  • Mencocokkan karakter apa sahaja

    . Digunakan untuk mencocokkan karakter apa sahaja, seperti:

    Ungkapan biasa: c.t Cat cet caaat dog Hasil pencocokan:cat cetCaat Dog Analisis: c.t akan dipadukan dengan "c yang bermula dan berakhir dengan c yang berakhir", dengan baris yang dipilih di tengah-tengah.

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

    Ungkapan biasa: c...t Cat cet caat dog Hasil pencocokan: cat cetcaatanjing

  • Mencocokkan karakter khas

    . mengandungi makna khas dalam ungkapan biasa, ialah watak khas.. juga merupakan watak khas yang boleh berperanan sebagai penyampaian terhadap watak khas.. jika anda ingin mencocokkan adalah watak yang benar..

    Ungkapan biasa: c.t Cat c.t dog Hasil pencocokan: catc.tanjing Nota: Kerana \ juga merupakan karakter khas, anda perlu menggunakan dua garis miring untuk mencocokkan karakter \ yang sebenar:

    Ekspresi biasa: c\t Menunggu teks yang sepadan: cat c\t dog Hasil pencocokan: catc\tanjing

  • Menggunakan kumpulan aksara

    Seperti yang dinyatakan di atas. Boleh mencocokkan mana-mana watak, tetapi bagaimana jika saya mahu mencocokkan beberapa watak tertentu? Mencocokkan satu set watak tertentu boleh menggunakan [dan] meta-karakter.

    Ungkapan biasa: c[ab]t Menunggu teks yang sesuai: cat cbt cet Hasil pencocokan:cat cbtcet Analisis: [ab] akan mencocokkan "a atau b . Oleh itu, c[ab]t akan mencocokkan cat dan cbt tanpa mencocokkan cet".

  • Menggunakan pertalian

    Dalam contoh di atas, bagaimana jika saya mahu mencocokkan cet, adakah saya akan menambah satu di dalam [?] dan jika saya mahu mencocokkan huruf kecil yang tidak diingini, adakah saya akan menulis puluhan di dalamnya?

    Ungkapan biasa: c[a-z]t Cat cbt czt c2t Hasil pencocokan:cat cbt cztc2t Analisis: c[a-z]t menunjukkan "c yang bermula, t yang berakhir" dengan huruf "a" - "z" di tengah-tengah.

    Terdapat juga ruang yang serupa:

    [0-9] mempunyai fungsi yang sama seperti [0123456789]. [A-F] Mencocokkan huruf besar dari A hingga F. [A-Z] Mencocokkan semua huruf besar dari A hingga Z. [a-z] Mencocokkan semua huruf kecil dari a hingga z. [A-z] Mencocokkan semua aksara ASCII dari A hingga ASCII z ((tidak hanya mencocokkan semua aksara, tetapi juga mencocokkan aksara dalam jadual ASCII dari A hingga z, seperti [ dan ^ dll) ). [A-Za-z0-9] Mencocokkan semua huruf dan nombor besar dan kecil.

  • Pencocokan bukan set watak

    Kumpulan watak biasanya digunakan untuk menentukan satu set watak yang perlu dipadankan. Tetapi kadang-kadang, anda ingin mengecualikan satu set watak yang anda tidak mahu dipadankan. Ini boleh dicapai dengan menafikan kumpulan watak. Contohnya:

    Ungkapan biasa: c[^a-z]t Cat cbt czt c2t cAt Hasil pencocokan: cat cbt cztc2t cAtAnalisis: Ini adalah kebalikan daripada contoh sebelumnya..[a-z] mencocokkan semua huruf kecil, sedangkan [^a-z] mencocokkan semua huruf bukan kecil..

    Perhatikan, ^ adalah untuk membatalkan pencocokan semua watak dalam set watak.

  • Karakter utama

    Karakter utama mempunyai makna khas dalam ungkapan biasa, di mana kita telah mengatakan beberapa watak utama, seperti., [dan].....................................................................................................................................................................................................................................

    Semua meta-karakter boleh diteruskan dengan penyesuaian garis miring, apabila penyesuaian dilakukan, watak akan sepadan dengan dirinya sendiri dan bukan dengan makna khasnya; contohnya, [ akan sepadan dengan " [ ":

    Ungkapan biasa: a[b] Menunggu teks yang sepadan: a[b ab a[[b Hasil pencocokan:a[bab a[[b Perhatikan: \ digunakan untuk mengubah karakter meta, yang juga bermaksud \ juga merupakan meta. Jadi jika anda perlu untuk mencocokkan " \ " sebenar, anda boleh menggunakan \:

    Ekspresi biasa: a\b Menunggu teks yang sepadan: a\b a\b a[[b Hasil pencocokan: a\ba\ba[[b

  • Aksara kosong

    Kadang-kadang anda mungkin perlu mencocokkan aksara kosong yang tidak boleh dicetak dalam teks. Sebagai contoh, anda ingin dapat mencari semua aksara Tab, atau semua baris ganti. Anda boleh menggunakan aksara khas dalam jadual berikut:

    img

    Sebagai contoh, \r\n akan mencocokkan kombinasi pertukaran baris balik, yang bermaksud pertukaran baris fail dalam Windows. Dalam sistem Linux dan Unix, hanya perlu menggunakan \n.

  • Mencocokkan jenis aksara tertentu

    Terdapat beberapa meta-karakter khas yang boleh digunakan untuk mencocokkan set watak yang biasa digunakan. Meta-karakter ini dipanggil kelas watak yang sesuai. Anda akan mendapati mereka sangat mudah digunakan.

    Mencocokkan nombor atau bukan nombor Seperti yang dinyatakan di atas,,[0-9] boleh mencocokkan semua nombor. Jika anda tidak mahu mencocokkan mana-mana nombor, anda boleh menggunakan [^0-9]. Jadual berikut menyenaraikan karakter kelas nombor dan bukan nombor:

    img

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

    Ekspresi biasa: c\Dt Cat c2t czt c9t Hasil pencocokan:catc2tcztc9t Mencocokkan aksara abjad dan bukan abjad Satu lagi watak utama yang biasa digunakan ialah \w dan \W:

    img

    Ungkapan biasa: c\wt Menunggu teks yang sepadan: cat c2t czt c-t c\t Hasil pencocokan:cat c2tc-t c\ t

    Ungkapan biasa: c\Wt Menunggu teks yang sepadan: cat c2t c-t c\t Hasil pencocokan: cat c2tc-t c\tMencocokkan ruang kosong dan ruang kosong Kelas terakhir yang akan kita temui ialah kelas kosong:

    img

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

    Ungkapan biasa: c\St Menunggu teks yang sepadan: cat c t c2t c \ t Hasil pencocokan:catc tc2t c\t

  • Mencocokkan satu atau lebih aksara

    + meta-karakter menunjukkan satu atau lebih watak yang sepadan. Sebagai contoh, a akan sepadan dengan "a", dan a + sepadan dengan satu atau lebih "a".

    Ungkapan biasa: cat Text: ct cat caat caaat Hasil pencocokan: ctcatperuntukan

    Ungkapan biasa: ca + t Text: ct cat caat caaat Hasil pencocokan: ctcat caat caaatApabila menggunakan + pada set watak, anda perlu meletakkan simbol + di luar set:

    Ungkapan biasa: c[0-9] + t Text:ct c0t cat c123t Hasil pencocokan: ctc0tkucingc123tAnalisis: c[0-9]+t menunjukkan senar yang bermula dengan "c, berakhir dengan "t", dengan satu atau lebih nombor di tengah-tengah.

    Sudah tentu, [0-9+] juga merupakan ungkapan biasa yang sah, tetapi ia menunjukkan satu set aksara yang mengandungi simbol "0" - "9" dan "+".

    Secara umum, meta-karakter seperti. dan + digunakan sebagai makna literal apabila digunakan dalam kumpulan watak, jadi tidak perlu ditransformasikan. Tetapi tidak mengapa untuk ditransformasikan, jadi fungsi [0-9+] dan [0-9+] adalah sama.

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

  • Mencocokkan sifar atau lebih aksara

    Jika anda ingin mencocokkan sifar atau lebih watak, anda boleh menggunakan * meta watak.

    Ungkapan biasa: ca*t Text: ct cat caat cbt Hasil pencocokan:ct cat caatcbt Nota:* Simbol adalah meta-karakter. Untuk dapat mencocokkan "*", perlu melakukan pengalihan *.

  • Mencocokkan sifar atau satu aksara

    ? mencocokkan sifar atau satu watak. Oleh itu,? sangat sesuai untuk mencocokkan satu watak pilihan dalam teks.

    Ungkapan biasa: ca?t Text: ct cat caat cbt Hasil pencocokan:ct catcaat cbt Nota:? simbol adalah meta-karakter.? perlu ditukar untuk mencocokkan "? ".

  • Menggunakan jumlah pencocokan

    Ekspresi normal membenarkan bilangan kali yang dipadankan ditentukan. Bilangan kali boleh ditentukan di antara ketukan { ketukan dan ketukan } ketukan. Nota: { dan } juga merupakan meta-karakter, yang memerlukan penyampaian apabila menggunakan makna literal.

    Pencocokan yang tepat Untuk menentukan bilangan kali yang akan dipadankan, anda boleh memasukkan nombor di antara { dan }. Sebagai contoh, {3} akan mencocokkan 3 watak atau kumpulan yang muncul sebelum ini:

    Ungkapan biasa: ca{3} t Text: ct cat caaat cbt Hasil pencocokan: ct catcaaatcbt Sekurang-kurangnya jumlah pencocokan Kita juga boleh menetapkan nilai minimum yang sesuai sahaja. Sebagai contoh, {2,} bermaksud untuk mencocokkan 2 atau lebih kali:

    Perkataan biasa: ca{1,} t Text: ct cat caaat cbt Hasil pencocokan: ctcat caaatcbt Pencocokan dalam julat pangkat Kita juga boleh menggunakan nilai minimum dan maksimum untuk menentukan jumlah kecocokan. Sebagai contoh, {2,3} bermaksud kecocokan minimum 2 kali dan maksimum 3 kali.

    Perkataan biasa: ca{2,3} t Text: ct cat caaat cbt Hasil pencocokan: ct catcaaatcbt Jadi? dan fungsi {0,1} adalah sama, + dan fungsi {1,} adalah sama.

  • Pemadan yang tidak tamak

    Cuba lihat contoh berikut:

    Ungkapan biasa: s.*g Text: xiao song xiao song Hasil pencocokan: xiao song xiao song Analisis: s.*g tidak mencocokkan dua "song" seperti yang dijangkakan, tetapi mencocokkan semua teks di antara "s" pertama dan "g" terakhir.

    Ini kerana * dan + adalah pencocokan yang tamak. Maksudnya, ungkapan biasa sentiasa mencari pencocokan terbesar, bukan terkecil, yang dirancang dengan sengaja.

    Tetapi jika anda tidak mahu pencocokan tamak, gunakan pencocokan tidak tamak untuk kata-kata pengukur ini (mencocokan sebilangan kecil watak yang mungkin); kata tidak tamak ditambahkan selepas kata pengukur:

    img

    Ya?Jika anda menggunakan *? untuk mengubah contoh di atas:

    正则表达式:s.G? Text: xiao song xiao song Hasil pencocokan: xiaosongxiaosong 分析:可以看到s.? g yang sepadan dengan dua "lagu".

  • Menentukan sempadan baris

    Meta-karakter yang sesuai dengan sempadan baris adalah ^ dan $, yang digunakan untuk permulaan dan akhir baris masing-masing.

    ^ Digunakan sebagai berikut:

    Ungkapan biasa: ^ xiao

    Text: Xiaosong (dalam bahasa Inggeris) Hasil pencocokan:xiaolagu

    Menunggu teks yang sepadan: axiaosong Hasil pencocokan: Axiaosong Analisis: ^ xiao mencocokkan senar yang bermula dengan " xiao ".

    $ digunakan sebagai berikut:

    Perkataan biasa: song$

    Text: Xiaosong (dalam bahasa Inggeris) Hasil pencocokan: xiaosong

    Text: Xiaosonga (dalam bahasa Inggeris) Hasil pencocokan: Xiaosonga Analisis: song$ mencocokkan senar yang berakhir dengan "song".

    Penggunaan bersama:

    Perkataan biasa: ^ [0-9a-zA-Z] {4,} $

    Menunggu teks yang sepadan: a1b234ABC Hasil pencocokan:a1b234ABC

    Teks yang akan dipadankan: + a1b23 = 4ABC Hasil pencocokan: + a1b23 = 4ABC Analisis: ^ [0-9a-zA-Z]{4,} $ yang dipadukan terdiri daripada nombor atau huruf, dan jumlah digit lebih besar daripada empat digit sama dengan senar.

    Nota: ^ jika terletak di awal set, menunjukkan negatif; jika berada di luar set, ia akan mencocokkan kedudukan permulaan string. Semua orang boleh mencuba perbezaan antara [^0-9] dan ^[0-9].

  • Menggunakan mod pelbagai baris

    Walau bagaimanapun, [[?m]] boleh diaktifkan dalam mod pelbagai baris. Dalam mod pelbagai baris, enjin ekspresi biasa akan menukar tanda baris sebagai pemisah baris, ^ akan mencocokkan permulaan teks atau permulaan baris, dan $ boleh mencocokkan akhir teks atau akhir baris.

    Cuba ubah contoh sebelumnya:

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

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

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

    Perhatikan: Jika anda menggunakan pola berbilang baris, ((?m) mesti diletakkan di awal ungkapan biasa. (?m) tidak disokong dalam kebanyakan pelaksanaan ekspresi biasa. Sesetengah pelaksanaan ekspresi biasa juga menyokong penggunaan \A pada permulaan dan \Z pada penghujung string yang sepadan. Jika disokong, maka fungsi meta-karakter ini adalah sama dengan ^, $. Tetapi meta-karakter ini tidak boleh menggunakan pembaikan \?m, jadi tidak boleh digunakan dalam mod multi-baris.

Sebelum ini, anda boleh membaca artikel berikut untuk mempelajari ekspresi biasa secara sistematik:

Dibaharui dari Buku Panduan iOS_Chiso Sango


Lebih lanjut