Ungkapan Biasa - Contoh


Ekspresi ringkas

Bentuk termudah bagi ungkapan biasa ialah satu aksara biasa yang sepadan dengan dirinya dalam rentetan carian. Sebagai contoh, corak aksara tunggal seperti A akan sentiasa sepadan dengan huruf A tidak kira di mana ia muncul dalam rentetan carian. Berikut ialah beberapa contoh corak ungkapan biasa aksara tunggal:

/a/
/7/
/M/

boleh menggabungkan banyak aksara tunggal untuk membentuk ungkapan besar. Sebagai contoh, ungkapan biasa berikut menggabungkan ungkapan aksara tunggal: a, 7 dan M.

/a7M/

Perhatikan bahawa tiada pengendali penggabungan. Hanya taip satu demi satu aksara.

Padanan aksara

Tempoh (.) Memadankan setiap aksara cetakan atau bukan cetakan dalam rentetan dengan satu pengecualian. Pengecualian ialah aksara baris baharu (n). Ungkapan biasa berikut sepadan dengan aac, abc, acc, adc, dsb., serta a1c, a2c, a-c dan a#c:

/a.c/

Untuk memadankan rentetan yang mengandungi nama fail dan noktah (.) ialah Untuk memasukkan komponen rentetan, mendahului noktah dalam ungkapan biasa dengan aksara sengkang ke belakang (). Untuk menggambarkan, ungkapan biasa berikut sepadan dengan nama fail.ext:

/filename\.ext/

Ungkapan ini hanya membenarkan anda memadankan "mana-mana" aksara tunggal. Ia mungkin perlu untuk memadankan kumpulan aksara tertentu dalam senarai. Sebagai contoh, anda mungkin ingin mencari tajuk bab berangka (Bab 1, Bab 2, dan seterusnya).

Ekspresi kurungan

Untuk membuat senarai kumpulan aksara yang sepadan, letakkan satu atau lebih aksara tunggal di dalam kurungan segi empat sama ([ dan ]). Apabila aksara disertakan dalam kurungan, senarai itu dipanggil "ungkapan kurungan". Aksara biasa mewakili dirinya dalam kurungan segi empat sama seperti dalam mana-mana kedudukan lain, iaitu, ia sepadan dengan dirinya sekali dalam teks input. Kebanyakan watak istimewa kehilangan makna apabila ia muncul dalam ungkapan kurungan segi empat sama. Terdapat beberapa pengecualian, seperti:

  • Jika aksara ] bukan item pertama, ia menamatkan senarai. Untuk memadankan aksara ] dalam senarai, letakkannya dahulu, sejurus selepas pembukaan [. Watak

  • terus bertindak sebagai watak melarikan diri. Untuk memadankan aksara, gunakan \.

Watak yang disertakan dalam ungkapan kurungan segi empat sama hanya sepadan dengan satu aksara pada kedudukan itu dalam ungkapan biasa. Ungkapan biasa berikut sepadan dengan Bab 1, Bab 2, Bab 3, Bab 4 dan Bab 5:

/Chapter [12345]/

Perhatikan bahawa kedudukan perkataan Bab dan ruang berikut ditetapkan relatif kepada aksara dalam kurungan segi empat sama. . Ungkapan kurungan menentukan set aksara yang hanya sepadan dengan kedudukan aksara tunggal sejurus selepas perkataan Bab dan ruang. Ini adalah kedudukan watak kesembilan.

Untuk menggunakan julat dan bukannya aksara itu sendiri untuk mewakili kumpulan aksara yang sepadan, gunakan tanda sempang (-) untuk memisahkan aksara permulaan dan penamat dalam julat. Nilai aksara bagi satu aksara menentukan susunan relatif dalam julat. Ungkapan biasa berikut mengandungi ungkapan julat yang setara dengan senarai kurungan yang ditunjukkan di atas.

/Chapter [1-5]/

Apabila julat ditentukan dengan cara ini, kedua-dua nilai mula dan akhir disertakan dalam julat. Ambil perhatian, adalah penting juga untuk ambil perhatian bahawa nilai mula mesti datang sebelum nilai akhir dalam susunan isihan Unicode.

Untuk memasukkan tanda sempang dalam ungkapan kurungan segi empat sama, gunakan salah satu daripada kaedah berikut:

  • Escapenya dengan garis sengkang ke belakang:

    [\-]
  • Letakkan tanda sempang pada permulaan atau penghujung senarai kurungan. Ungkapan berikut sepadan dengan semua huruf kecil dan sempang:

    [-a-z]
    [a-z-]
  • Mencipta julat di mana nilai aksara permulaan adalah kurang daripada sempang dan nilai aksara berakhir adalah sama atau lebih besar daripada sempang . Dua ungkapan biasa berikut memenuhi keperluan ini:

    [!--]
    [!-~]

Untuk mencari semua aksara yang tiada dalam senarai atau julat, letakkan karet (^) pada permulaan senarai . Jika karet muncul di tempat lain dalam senarai, ia sepadan dengan dirinya sendiri. Ungkapan biasa berikut sepadan dengan mana-mana nombor dan aksara selain daripada 1, 2, 3, 4 atau 5:

/Chapter [^12345]/

Dalam contoh di atas, ungkapan itu sepadan dengan 1, 2, 3, Mana-mana nombor dan aksara selain daripada 4 atau 5. Jadi, sebagai contoh, Bab 7 adalah padanan, dan Bab 9 juga padanan.

Ungkapan di atas boleh diwakili menggunakan tanda sempang (-):

/Chapter [^1-5]/

Penggunaan biasa ungkapan kurungan adalah untuk menentukan padanan bagi mana-mana huruf besar atau huruf kecil atau sebarang nombor. Ungkapan berikut menentukan padanan sedemikian:

/[A-Za-z0-9]/

Penggantian dan Pengumpulan

Penggantian menggunakan aksara | untuk membenarkan pemilihan antara dua atau lebih pilihan penggantian. Sebagai contoh, ungkapan biasa tajuk bab boleh dilanjutkan untuk mengembalikan julat padanan yang lebih luas daripada tajuk bab. Walau bagaimanapun, ia tidak semudah yang anda fikirkan. Penggantian sepadan dengan ungkapan terbesar pada kedua-dua sisi aksara |.

Anda mungkin berfikir bahawa ungkapan berikut sepadan dengan Bab atau Bahagian yang muncul pada permulaan dan akhir baris, diikuti dengan satu atau dua nombor:

/^Chapter|Section [1-9][0-9]{0,1}$/

Malangnya, ungkapan biasa di atas sepadan sama ada perkataan Bab di awal baris, atau perkataan Bahagian di hujung baris dan sebarang nombor yang mengikutinya. Jika rentetan input ialah Bab 22, maka ungkapan di atas hanya sepadan dengan perkataan Bab. Jika rentetan input ialah Bahagian 22, maka ungkapan ini sepadan dengan Bahagian 22.

Untuk menjadikan ungkapan biasa lebih mudah diurus, anda boleh menggunakan kurungan untuk mengehadkan skop penggantian, iaitu, pastikan ia hanya digunakan pada dua perkataan Bab dan Bahagian. Walau bagaimanapun, kurungan juga digunakan untuk mencipta subungkapan dan mungkin menangkapnya untuk kegunaan kemudian, seperti yang dibincangkan dalam bahagian rujukan belakang. Anda boleh membuat ungkapan biasa sepadan dengan Bab 1 atau Bahagian 3 dengan menambah kurungan di tempat yang sesuai dalam ungkapan biasa di atas.

Ungkapan biasa berikut menggunakan kurungan untuk menggabungkan Bab dan Bahagian supaya ungkapan berfungsi dengan betul:

/^(Chapter|Section) [1-9][0-9]{0,1}$/

Walaupun ungkapan ini berfungsi dengan betul, kurungan di sekitar Bab|Bahagian juga akan Menangkap salah satu daripada dua perkataan yang sepadan untuk kegunaan kemudian. Oleh kerana hanya terdapat satu set kurungan dalam ungkapan di atas, terdapat hanya satu "subpadanan" yang ditangkap.

Dalam contoh di atas, anda hanya perlu menggunakan kurungan untuk menggabungkan perkataan Bab dan Bahagian. Untuk mengelakkan padanan daripada disimpan untuk kegunaan masa hadapan, letakkan ?: sebelum corak ungkapan biasa yang dikurung. Pengubahsuaian berikut menyediakan keupayaan yang sama tanpa menyimpan subpadanan:

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

Selain ?: metacharacter, dua metacharacter bukan menangkap lain mencipta sesuatu yang dipanggil padanan "lookahead". Pandangan ke hadapan ditentukan menggunakan ?= , yang sepadan dengan rentetan carian pada permulaan corak ungkapan biasa yang sepadan dalam kurungan. Pandangan ke belakang ditentukan menggunakan ?!, yang sepadan dengan rentetan carian pada permulaan rentetan yang tidak sepadan dengan corak ungkapan biasa.

Sebagai contoh, katakan anda mempunyai dokumen yang mengandungi rujukan kepada Windows 3.1, Windows 95, Windows 98 dan Windows NT. Katakan lagi bahawa anda perlu mengemas kini dokumen untuk menukar semua rujukan kepada Windows 95, Windows 98 dan Windows NT kepada Windows 2000. Ungkapan biasa berikut (yang merupakan contoh ramalan ke hadapan) sepadan dengan Windows 95, Windows 98 dan Windows NT:

/Windows(?=95 |98 |NT )/

Selepas padanan ditemui, ia diikuti oleh aksara teks yang dipadankan (tidak termasuk ramalan) dalam baris sebelumnya) dan kemudian cari perlawanan seterusnya. Contohnya, jika ungkapan di atas sepadan dengan Windows 98, carian akan diteruskan selepas Windows dan bukannya selepas 98.

Contoh Lain

Disenaraikan di bawah adalah beberapa contoh ungkapan biasa:

正则表达式描述
/b([a-z]+) 1b/gi一个单词连续出现的位置。
/(w+)://([^/:]+)(:d*)?([^# ]*)/将一个URL解析为协议、域、端口及相对路径。
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/定位章节的位置。
/[-a-z]/A至z共26个字母再加一个-号。
/terb/可匹配chapter,而不能匹配terminal。
/Bapt/可匹配chapter,而不能匹配aptitude。
/Windows(?=95 |98 |NT )/可匹配Windows95或Windows98或WindowsNT,当找到一个匹配后,从Windows后面开始进行下一次的检索匹配。
/^s*$/匹配空行。
/d{2}-d{5}/验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。
/<s*(S+)(s[^>]*)?>[sS]*<s*/1s*>/匹配 HTML 标记。