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.
Ungkapan biasa hanya boleh mengandungi teks biasa, yang mewakili untuk mencocokkan teks ini dengan tepat; sebagai contoh:
Perkataan biasa:song
Menunggu teks yang sepadan: xiao songge, xiao songge
Hasil pencocokan: xiaosong
Ge, xiao Songge
Ekspresi biasa secara lalai ditulis dengan huruf besar, jadi song tidak akan sepadan dengan
. Digunakan untuk mencocokkan karakter apa sahaja, seperti:
Ungkapan biasa: c.t
Cat cet caaat dog
Hasil pencocokan:cat
cet
Caat 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 cetcaat
anjing
. 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.t
anjing
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\t
anjing
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
cbt
cet
Analisis: [ab] akan mencocokkan "a
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
czt
c2t
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.
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
cAt
Analisis: 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 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[b
ab 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\b
a[[b
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:
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.
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:
Ekspresi biasa: c\dt
Cat c2t czt c9t
Hasil pencocokan: catc2t
cztc9t
Ekspresi biasa: c\Dt
Cat c2t czt c9t
Hasil pencocokan:cat
c2tczt
c9t
Mencocokkan aksara abjad dan bukan abjad
Satu lagi watak utama yang biasa digunakan ialah \w dan \W:
Ungkapan biasa: c\wt
Menunggu teks yang sepadan: cat c2t czt c-t c\t
Hasil pencocokan:cat
c2t
c-t c\ t
Ungkapan biasa: c\Wt
Menunggu teks yang sepadan: cat c2t c-t c\t
Hasil pencocokan: cat c2tc-t
c\t
Mencocokkan ruang kosong dan ruang kosong
Kelas terakhir yang akan kita temui ialah kelas kosong:
Ekspresi biasa: c\st
Cat c t c2t c \ t
Hasil pencocokan: catc t
c2t c\t
Ungkapan biasa: c\St
Menunggu teks yang sepadan: cat c t c2t c \ t
Hasil pencocokan:cat
c tc2t
c\t
+ 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: ctcat
peruntukan
Ungkapan biasa: ca + t
Text: ct cat caat caaat
Hasil pencocokan: ctcat
caat
caaat
Apabila menggunakan + pada set watak, anda perlu meletakkan simbol + di luar set:
Ungkapan biasa: c[0-9] + t
Text:ct c0t cat c123t
Hasil pencocokan: ctc0t
kucingc123t
Analisis: c[0-9]+t menunjukkan senar yang bermula dengan "c
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 +。
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
caat
cbt
Nota:* Simbol adalah meta-karakter. Untuk dapat mencocokkan "*", perlu melakukan pengalihan *.
? 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
cat
caat cbt
Nota:? simbol adalah meta-karakter.? perlu ditukar untuk mencocokkan "? ".
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 catcaaat
cbt
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
caaat
cbt
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 catcaaat
cbt
Jadi? dan fungsi {0,1} adalah sama, + dan fungsi {1,} adalah sama.
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:
Ya?Jika anda menggunakan *? untuk mengubah contoh di atas:
正则表达式:s.G?
Text: xiao song xiao song
Hasil pencocokan: xiaosong
xiaosong
分析:可以看到s.? g yang sepadan dengan dua "lagu".
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:xiao
lagu
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].
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=4ABCABC123456
Analisis: ((?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.
Dibaharui dari Buku Panduan iOS_Chiso Sango