avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Belajar ungkapan biasa secara sistematik (I): Asas

Dicipta dalam: 2017-03-29 10:52:47, dikemas kini pada: 2020-11-18 12:39:53
comments   2
hits   3010

Belajar ungkapan biasa secara sistematik (I): Asas

Apakah ungkapan yang betul? Ungkapan biasa adalah menggunakan beberapa aksara tertentu yang ditakrifkan terlebih dahulu, dan kombinasi aksara tertentu ini, untuk membentuk satu senar senar peraturan, yang digunakan untuk menyatakan logik penapisan pada senar tersebut.

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

Untuk memudahkan anda belajar, saya cadangkan Regextor, perisian yang mengesahkan ungkapan biasa, seperti yang anda boleh lihat dalam artikel saya, di mana saya juga cadangkan banyak perisian yang baik untuk Mac.

Belajar ungkapan biasa secara sistematik (I): Asas

Berikut adalah beberapa peraturan untuk ungkapan biasa:

  • #### Memadankan aksara teks biasa

Ungkapan biasa boleh mengandungi teks biasa sahaja, yang mewakili untuk sepadan dengan tepat dengan teks tersebut. Contohnya:

Ekspresi rasmi:song Xiaoosongge, xiao Songge Hasil perlawanan: xiaosongge,xiaoSongge Ekspresi formal secara default adalah huruf kecil, jadi song tidak akan sepadan dengan “Song”. Tetapi kebanyakan pelaksanaan ekspresi formal menyediakan pilihan untuk tidak membezakan huruf kecil.

  

  

  • #### Memadankan aksara rawak

. Digunakan untuk memadankan aksara rawak, seperti:

Ungkapan rasmi: c.t Cat cet caaat dog Hasil pertandingan:cat cet caaat dog Analisis: c.t akan sepadan dengan senar yang bermula dengan “c”, berakhir dengan “t”, dan di tengah-tengahnya ialah aksara rawak.

Begitu juga, pelbagai berturut-turut. boleh dipadankan dengan beberapa aksara rawak berturut-turut:

ungkapan rasmi: c..t Cat cet caat dog (dalam bahasa Inggeris) Hasil perlawanan: cat cet caat dog

  

  

  • #### Memadankan aksara khas

. dalam ungkapan biasa yang mengandungi makna khas, adalah watak khas. .\ juga watak khas, yang boleh berfungsi sebagai terjemahan untuk watak khas. . Jika anda ingin mencocokkan adalah watak “”. yang sebenar, anda perlu..Tanda “ . ” yang sebenar ialah .

Ungkapan rasmi: c.t Cat c.t dog Hasil perlawanan: catc.t dog Nota: Oleh kerana \ juga merupakan aksara istimewa, anda perlu menggunakan dua garis miring untuk menandakan aksara \ yang sebenar\:

Ungkapan rasmi: c\t Menunggu untuk disesuaikan Teks: cat c\t dog Hasil perlawanan: catc\t dog

  

  

  • #### Menggunakan kumpulan aksara

Ia boleh digunakan untuk mencocokkan satu aksara, tetapi bagaimana jika saya ingin mencocokkan beberapa aksara tertentu?[dan [huruf pertama ].

Ungkapan rasmi: c[ab]t Cat cbt cet Hasil pertandingan:cat cbt cet Analisis:[ab] akan sepadan dengan “a” atau “b”. Jadi c[ab]t akan sepadan dengan “cat” dan “cbt” dan tidak sepadan dengan “cet” 。

  

  

  • #### Menggunakan ruang kumpulan aksara

Dalam contoh di atas, jika saya mahu memadankan cet,[Adakah terdapat satu tambahan? Jika saya mahu menyamai huruf kecil, saya akan menulis puluhan huruf dalam kotak ini.[a-z]:

Ungkapan rasmi: c[a-z]t Cat cbt czt c2t Hasil pertandingan:cat cbt czt c2t Analisis: c[a-z]t menandakan huruf yang bermula dengan “c” dan berakhir dengan “t”, dan di tengahnya ialah huruf “a” - “z” yang dipilih.

Antara yang lain seperti:

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

  

  

  • #### Pencocokan bukan set

Kumpulan aksara biasanya digunakan untuk menentukan sekumpulan aksara yang perlu dipadankan. Tetapi kadang-kadang, anda ingin mengecualikan sekumpulan aksara yang anda tidak mahu dipadankan. Anda boleh melakukannya dengan menolak kumpulan aksara.

Ungkapan rasmi: c[^a-z]t Cat cbt czt c2t cAt Hasil perlawanan: cat cbt czt c2t cAt Analisis: Ini bertentangan dengan contoh sebelumnya.[[a-z] sesuai dengan semua huruf kecil, sedangkan [^a-z] Mencocokkan semua aksara yang bukan huruf kecil.

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

  

  

  • #### Aksara asal

Nombor meta mempunyai makna khusus dalam ungkapan biasa, seperti yang telah kita sebutkan di atas.[Dan] tidak boleh digunakan untuk menyatakan makna mereka secara langsung, contohnya, tidak boleh digunakan secara langsung[“Semuanya sesuai”.[“Dengan menggunakan. untuk bersesuaian”.

Semua aksara meta boleh ditambahkan terjemahan garis miring di hadapan, dan apabila terjemahan, aksara akan sepadan dengan dirinya sendiri dan bukan dengan makna khasnya.[“Selain itu,[ “:

Ungkapan biasa: a[b Teks untuk dipadankan: a[b ab a[[b Hasil pertandingan:a[b ab a[[b Nota:\ digunakan untuk menterjemahkan huruf pertama, yang juga bermakna\ juga merupakan huruf pertama. Oleh itu, jika perlu untuk memadankan “\” yang sebenar, ia boleh digunakan.\:

Ungkapan biasa: a\b Teks untuk dipadankan: a\b a\b a[[b Hasil selepas sepadan: a\b a\b a[[b

  

  

  • #### Aksara kosong

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

Belajar ungkapan biasa secara sistematik (I): Asas

Sebagai contoh, \r\n akan memadankan satu set pertukaran balik, yang mewakili pertukaran fail dalam Windows. Dalam sistem Linux dan Unix, hanya perlu menggunakan \n.

  

  

  • #### Memadankan jenis aksara tertentu

Terdapat beberapa meta-karakter khas yang boleh digunakan untuk mencocokkan kumpulan aksara yang biasa digunakan. Meta-karakter ini dikenali sebagai kelas aksara pencocokan. Anda akan mendapati ia mudah digunakan.

Nombor yang sepadan atau tidak Saya tidak tahu apa-apa tentang apa yang berlaku.[0-9] boleh disesuaikan dengan semua nombor. Jika anda tidak mahu disesuaikan dengan mana-mana nombor, anda boleh menggunakan[^0-9]。 Jadual di bawah menyenaraikan huruf-huruf bertaraf digital dan bukan digital:

Belajar ungkapan biasa secara sistematik (I): Asas

Ungkapan biasa: c\dt Cat c2t czt c9t Hasil perlawanan: catc2t czt c9t

Ungkapan rasmi: c\Dt Cat c2t czt c9t Hasil pertandingan:cat c2t czt c9t Mencocokkan aksara huruf dan aksara bukan huruf Satu lagi aksara meta yang biasa digunakan ialah \w dan \W:

Belajar ungkapan biasa secara sistematik (I): Asas

Ungkapan rasmi: c\wt Cat c2t czt c-t c\t Hasil pertandingan:cat c2t c-t c\t

Ungkapan rasmi: c\Wt Cat c2t c-t c\t Hasil perlawanan: cat c2tc-t c\t Mencocokkan kosong dan tidak kosong Kelas terakhir yang akan anda jumpai ialah kelas kosong:

Belajar ungkapan biasa secara sistematik (I): Asas

Ungkapan rasmi: c\st Cat c t c2t c\t Ditunggu untuk dipadankan Hasil perlawanan: catc t c2t c\t

Ungkapan rasmi: c\St Cat c t c2t c\t Ditunggu untuk dipadankan Hasil pertandingan:cat c t c2t c\t

  

  

  • #### Satu atau lebih aksara yang sepadan

Karakter + menunjukkan padanan satu atau lebih aksara. Sebagai contoh, a akan padanan “a”, dan a+ padanan satu atau lebih “a”.

ungkapan rasmi: cat Cat Cat Cat Cat Cat Cat Cat Hasil pencocokan: ctcat caat caaat

Ungkapan rasmi: ca+t Cat Cat Cat Cat Cat Cat Cat Hasil pencocokan: ctcat caat caaat Apabila + digunakan pada set aksara, tanda + perlu diletakkan di luar set:

Ungkapan rasmi: c[0-9]+t Ditunggu untuk disesuaikan Teks: ct c0t cat c123t Hasil pencocokan: ctc0t cat c123t Analisis: c[0-9]+t menandakan string yang bermula dengan “c” dan berakhir dengan “t” dengan satu atau lebih nombor di tengahnya.

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

Secara amnya, meta seperti . dan + digunakan untuk kumpulan aksara yang digunakan sebagai makna harfiah, oleh itu tidak perlu menterjemahkannya.[0-9+] dan[0-9+Fungsinya sama.

Nota: + adalah huruf meta, dan “+” perlu diterjemahkan+。

  

  

  • #### Memadankan sifar atau lebih

Jika anda ingin mencocokkan sifar atau lebih, anda boleh menggunakan*Huruf pertama:

Ungkapan rasmi: ca*t Ct cat caat cbt Hasil pertandingan:ct cat caat cbt Notis:*Simbol adalah huruf pertama. Untuk dapat memadankan “ * “, perlu dilakukan pentafsiran*。

  

  

  • #### Memadankan sifar atau satu aksara

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

ungkapan rasmi: ca?t Ct cat caat cbt Hasil pertandingan:ct cat caat cbt Nota: Simbol ? adalah huruf pertama. Untuk dapat memadankan ” ? “, perlu dilakukan pengalihan.?。

  

  

  • #### Menggunakan jumlah padanan

Ekspresi rasmi membenarkan untuk menentukan berapa kali pertandingan akan diadakan. Jumlah kali pertandingan boleh ditentukan antara { dan } . Nota: { dan } juga merupakan aksara pertama dan perlu diterjemahkan apabila digunakan secara harfiah.

Pencocokan yang tepat Untuk menentukan berapa kali ia akan dipadankan, anda boleh memasukkan nombor di antara { dan }. Sebagai contoh, {3} akan dipadankan dengan 3 kali set atau watak yang muncul sebelum:

Ungkapan rasmi: ca{3}t Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Hasil perlawanan: ct cat caaat cbt Minimum nombor yang sepadan Kita juga boleh menetapkan nilai minimum yang sesuai. Sebagai contoh, {2,} bermaksud sesuai 2 kali atau lebih:

Ungkapan rasmi: ca{1,}t Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Hasil pencocokan: ctcat caaat cbt Pencocokan antara dimensi Kita juga boleh menggunakan nilai minimum dan maksimum untuk menentukan bilangan padanan. Sebagai contoh, {2,3} bermakna minimum 2 dan maksimum 3 padanan.

Ungkapan rasmi: ca{2,3}t Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Cat Hasil perlawanan: ct cat caaat cbt Jadi? dan fungsi dari {0,1} adalah sama dengan + dan fungsi dari {1,} ialah sama dengan

  

  

  • #### Matching yang tidak tamak

Lihat contoh berikut:

Ekspresi rasmi: s.*g Xiao Song Xiao Song (dalam bahasa Inggeris) Hasil perlawanan: xiao song xiao song Analisis: s.*g tidak memadankan dua “lagu” seperti yang diharapkan, tetapi memadankan semua teks antara “s” pertama dan “g” terakhir.

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

Tetapi jika anda tidak mahu menggunakan perkataan yang serba serbi, gunakan perkataan yang serba serbi dari kata-kata tersebut. Kata serba serbi ditambah selepas perkataan yang serba serbi:

Belajar ungkapan biasa secara sistematik (I): Asas

*Ya?*Ia adalah versi yang tidak tamak, jadi ia boleh digunakan.*Untuk mengubah contoh di atas:

Ekspresi rasmi: s.?g Xiao Song Xiao Song (dalam bahasa Inggeris) Hasil perlawanan: xiaosong xiao song Analisis: anda boleh lihat s.?g telah dipadankan dengan dua lagu.

  

  

  • #### Tentukan sempadan senar

Border string yang sesuai dengan meta ialah ^ dan $, yang digunakan untuk permulaan dan pengakhiran string.

^ Terjemahan:

Ekspresi formal: ^ xiao

Teks yang disesuaikan: xiaoosong Hasil pertandingan:xiaosong

Teks yang disesuaikan: axiaosong Hasil perlawanan: axiaosong Analisis: ^xiao sepadan dengan senar yang bermula dengan “xiao”.

$ digunakan sebagai berikut:

Ekspresi rasmi: song$

Teks yang disesuaikan: xiaoosong Hasil perlawanan: xiaosong

Teks yang disesuaikan: xiaoosonga Hasil perlawanan:xiaosonga Analisis: song$ bersesuaian dengan senar yang berakhir dengan “song”

Penggunaan bersama:

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

Teks untuk dipadankan: a1b234ABC Hasil pertandingan:a1b234ABC

Teks untuk dipadankan: + a1b23 = 4ABC Hasil selepas sepadan: + a1b23=4ABC Analisis: ^[0-9a-zA-Z]{4,}$ bertanding dengan nombor atau huruf, dan digitnya lebih besar daripada string yang sama dengan empat digit.

Nota: ^ jika terletak di permulaan set, bermakna negatif; jika di luar set, akan sepadan dengan kedudukan permulaan string.[^0-9] dan ^[Perbezaan 0-9]

  

  

  • #### Menggunakan mod berbilang baris

Tetapi {{?m}} boleh digunakan dalam mod berbilang baris. Dalam mod berbilang baris, enjin ungkapan biasa menggunakan tanda ganti baris sebagai pemisah bagi senar, ^ untuk menandakan permulaan teks atau permulaan baris, dan $ untuk menandakan akhir teks atau akhir baris.

Untuk membetulkan contoh sebelumnya:

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

Teks untuk dipadankan: a1b234ABC +a1b23=4ABC ABC123456

Hasil pertandingan:a1b234ABC +a1b23=4ABC ABC123456 Analisis:[0-9a-zA-Z]{4,}$ akan memadankan setiap baris dengan nombor atau huruf, dan digitnya lebih besar daripada empat digit.

Nota: Jika digunakan dalam mod berbilang baris, ((?m) mesti diletakkan pada permulaan ungkapan biasa. (?m) tidak disokong dalam kebanyakan pelaksanaan ungkapan biasa. Beberapa pelaksanaan ungkapan biasa juga menyokong penggunaan permulaan \A untuk mencocokkan rentetan, dan penghujung \Z untuk mencocokkan rentetan. Jika disokong, maka fungsi meta ini adalah sama seperti ^, $. Tetapi meta ini tidak boleh menggunakan pengubahsuaian ((?m), dan oleh itu tidak boleh digunakan dalam mod berbilang baris.

Artikel ini membincangkan asas-asas, dan selepas itu anda boleh melihat artikel seterusnya tentang cara mempelajari ungkapan biasa secara sistematik ((b): artikel progresif 。

Dipetik dari Buku ringkas iOS_小松哥