Type/to search
8
Follow
1376
Followers
Belajar ungkapan biasa secara sistematik (I): Asas
Tutorials
Created 2017-03-29 10:52:47  Updated 2020-11-18 12:39:53
 2
 3402

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.

    img

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 <unk>].

    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) <unk>
    [[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] <unk> 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:

    img

    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:

    img

    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:

    img

    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:

    img

    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 <unk> {<unk> dan <unk> } <unk> .
    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:

    img

    *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 <unk>。

Dipetik dari Buku ringkas iOS_小松哥

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)