Bagikan melalui


Ekspresi reguler (C++)

Pustaka standar C++ mendukung beberapa tata bahasa ekspresi reguler. Topik ini membahas variasi tata bahasa yang tersedia saat menggunakan ekspresi reguler.

Tata bahasa ekspresi reguler

Tata bahasa ekspresi reguler yang akan digunakan ditentukan oleh penggunaan salah std::regex_constants::syntax_option_type satu nilai enumerasi. Tata bahasa ekspresi reguler ini didefinisikan dalam std::regex_constants:

  • ECMAScript: Ini paling dekat dengan tata bahasa yang digunakan oleh JavaScript dan bahasa .NET.
  • basic: Ekspresi reguler POSIX basic atau BRE.
  • extended: Ekspresi reguler POSIX extended atau ERE.
  • awk: Ini adalah extended, tetapi memiliki lebih banyak escape untuk karakter non-cetak.
  • grep: Ini adalah basic, tetapi juga memungkinkan karakter baris baru (\n) untuk memisahkan alternasi.
  • egrep: Ini adalah extended, tetapi juga memungkinkan karakter baris baru untuk memisahkan pergantian.

Secara default, jika tidak ada tata bahasa yang ditentukan, ECMAScript diasumsikan. Hanya satu tata bahasa yang dapat ditentukan.

Beberapa bendera juga dapat diterapkan:

  • icase: Abaikan kasus saat mencocokkan.
  • nosubs: Abaikan kecocokan yang ditandai (yaitu, ekspresi dalam tanda kurung); tidak ada substitusi yang disimpan.
  • optimize: Buat pencocokan lebih cepat, dengan biaya yang mungkin dari waktu konstruksi yang lebih besar.
  • collate: Gunakan urutan kolase sensitif lokal (misalnya, rentang formulir [a-z]).

Nol atau lebih bendera dapat dikombinasikan dengan tata bahasa untuk menentukan perilaku mesin ekspresi reguler. Jika hanya bendera yang ditentukan, ECMAScript diasumsikan sebagai tata bahasa.

Elemen

Elemen bisa menjadi salah satu dari yang berikut ini:

  • Karakter biasa yang cocok dengan karakter yang sama dalam urutan target.

  • Karakter '.' kartubebas yang cocok dengan karakter apa pun dalam urutan target kecuali baris baru.

  • Ekspresi tanda kurung dari formulir [expr], yang cocok dengan karakter atau elemen kolase dalam urutan target yang juga berada dalam set yang ditentukan oleh ekspresi expr, atau formulir [^expr], yang cocok dengan karakter atau elemen kolase dalam urutan target yang tidak ada dalam set yang ditentukan oleh ekspresi expr.

    Ekspresi expr dapat berisi kombinasi apa pun dari yang berikut ini:

    • Karakter individu. Menambahkan karakter ke set yang ditentukan oleh expr.

    • Rentang karakter formulir ch1-ch2. Menambahkan karakter yang diwakili oleh nilai dalam rentang [ch1, ch2] tertutup ke set yang ditentukan oleh expr.

    • Kelas karakter formulir [:name:]. Menambahkan karakter di kelas bernama ke set yang ditentukan oleh expr.

    • Kelas kesetaraan formulir [=elt=]. Menambahkan elemen penyusunan yang setara elt dengan set yang ditentukan oleh expr.

    • Simbol kolagen formulir [.elt.]. Menambahkan elemen elt kolase ke set yang ditentukan oleh expr.

  • Jangkar. Jangkar ^ cocok dengan awal urutan target. Jangkar $ cocok dengan akhir urutan target.

Grup pengambilan formulir (subekspresi), atau \(subekspresi\) di basic dan grep, yang cocok dengan urutan karakter dalam urutan target yang cocok dengan pola antara pemisah.

  • Escape identitas formulir \k, yang cocok dengan karakter k dalam urutan target.

Contoh:

  • a cocok dengan urutan "a" target tetapi tidak cocok dengan urutan "B"target , , "b"atau "c".

  • . cocok dengan semua urutan "a"target , , "B", "b"dan "c".

  • [b-z] cocok dengan urutan "b" target dan "c" tetapi tidak cocok dengan urutan "a" target atau "B".

  • [:lower:] cocok dengan urutan "a"target , , "b"dan "c" tetapi tidak cocok dengan urutan "B"target .

  • (a) cocok dengan urutan "a" target dan mengaitkan ambil grup 1 dengan urutan berikutnya "a", tetapi tidak cocok dengan urutan "B"target , , "b"atau "c".

Dalam ECMAScript, basic, dan grep, elemen juga dapat menjadi referensi kembali formulir \dd, di mana dd mewakili nilai desimal N yang cocok dengan urutan karakter dalam urutan target yang sama dengan urutan karakter yang cocok dengan grup pengambilan Nth.

Misalnya, (a)\1 cocok dengan urutan "aa" target karena grup pengambilan pertama (dan hanya) cocok dengan urutan "a" awal dan kemudian \1 cocok dengan urutan "a"akhir .

Dalam ECMAScript, elemen juga bisa menjadi salah satu dari yang berikut ini:

  • Grup formulir yang tidak diambil (?: subekspresi). Cocok dengan urutan karakter dalam urutan target yang dicocokkan dengan pola antara pemisah.

  • Escape format file terbatas dari formulir \f, , \n, \r, \tatau \v. Ini cocok dengan umpan formulir, baris baru, pengembalian gerbong, tab horizontal, dan tab vertikal, masing-masing, dalam urutan target.

  • Pernyataan positif dari formulir (= subekspresi). Cocok dengan urutan karakter dalam urutan target yang dicocokkan dengan pola antara pemisah, tetapi tidak mengubah posisi kecocokan dalam urutan target.

  • Pernyataan negatif dari formulir (! subekspresi). Cocok dengan urutan karakter apa pun dalam urutan target yang tidak cocok dengan pola antara pemisah, dan tidak mengubah posisi kecocokan dalam urutan target.

  • Urutan escape heksadesimal dari formulir \xhh. Cocok dengan karakter dalam urutan target yang diwakili oleh dua digit hhheksadesimal .

  • Urutan escape unicode dari formulir \uhhhh. Cocok dengan karakter dalam urutan target yang diwakili oleh empat digit hhhhheksadesimal .

  • Urutan escape kontrol dari formulir \ck. Cocok dengan karakter kontrol yang dinamai oleh karakter k.

  • Pernyataan batas kata dari formulir\b. Cocok ketika posisi saat ini dalam urutan target segera setelah batas kata.

  • Pernyataan batas kata negatif dari formulir \B. Cocok ketika posisi saat ini dalam urutan target tidak segera setelah batas kata.

  • Escape karakter dsw dari formulir \d, , \D, \s, \S, \w. \W Memberikan nama pendek untuk kelas karakter.

Contoh:

  • (?:a) cocok dengan urutan "a"target , tetapi "(?:a)\1" tidak valid karena tidak ada grup penangkapan 1.

  • (=a)a cocok dengan urutan "a"target . Pernyataan positif cocok dengan urutan "a" awal dalam urutan target dan final "a" dalam ekspresi reguler cocok dengan urutan "a" awal dalam urutan target.

  • (!a)a tidak cocok dengan urutan "a"target .

  • a\b. cocok dengan urutan "a~"target , tetapi tidak cocok dengan urutan "ab"target .

  • a\B. cocok dengan urutan "ab"target , tetapi tidak cocok dengan urutan "a~"target .

Dalam awk, elemen juga bisa menjadi salah satu dari yang berikut ini:

  • Escape format file dari formulir \\, , \a, \b, \f, \n, \r, \t, atau \v. Ini cocok dengan garis miring terbalik, pemberitahuan, backspace, umpan formulir, baris baru, pengembalian gerbong, tab horizontal, dan tab vertikal, masing-masing, dalam urutan target.

  • Urutan escape oktal dari formulir \ooo. Cocok dengan karakter dalam urutan target yang representasinya adalah nilai yang diwakili oleh satu, dua, atau tiga digit ooooktal .

Pengulangan

Elemen apa pun selain pernyataan positif, pernyataan negatif, atau jangkar dapat diikuti dengan jumlah pengulangan. Jenis jumlah pengulangan yang paling umum mengambil formulir {min,max}, atau \{min,max\} di basic dan .grep Elemen yang diikuti oleh bentuk jumlah pengulangan ini cocok dengan setidaknya min kemunculan berturut-turut dan tidak lebih dari kemunculan berturut-turut maks dari urutan yang cocok dengan elemen.

Misalnya, a{2,3} cocok dengan urutan "aa" target dan urutan "aaa"target , tetapi bukan urutan "a" target atau urutan "aaaa"target .

Jumlah pengulangan juga dapat mengambil salah satu formulir berikut:

  • {min} atau \{min} di basic dan grep. Setara dengan {min,min}.

  • {min,} atau \{min,\} di basic dan grep. Setara dengan {min,unbounded}.

  • *setara dengan {0,unbounded}.

Contoh:

  • a{2} cocok dengan urutan "aa" target tetapi bukan urutan "a" target atau urutan "aaa"target .

  • a{2,} cocok dengan urutan "aa"target , urutan "aaa"target , dan sebagainya, tetapi tidak cocok dengan urutan "a"target .

  • a* cocok dengan urutan ""target , urutan "a"target , urutan "aa"target , dan sebagainya.

Untuk semua tata bahasa kecuali basic dan grep, jumlah pengulangan juga dapat mengambil salah satu formulir berikut:

  • ? setara dengan {0,1}.

  • +setara dengan {1,unbounded}.

Contoh:

  • a? cocok dengan urutan "" target dan urutan "a"target , tetapi bukan urutan "aa"target .

  • a+ cocok dengan urutan "a"target , urutan "aa"target , dan sebagainya, tetapi bukan urutan ""target .

Dalam ECMAScript, semua bentuk jumlah pengulangan dapat diikuti oleh karakter ? yang menunjuk pengulangan yang tidak serakah.

Rangkaian

Elemen ekspresi reguler, dengan atau tanpa jumlah pengulangan, dapat digabungkan untuk membentuk ekspresi reguler yang lebih lama. Ekspresi yang dihasilkan cocok dengan urutan target yang merupakan perangkaian urutan yang dicocokkan oleh elemen individual.

Misalnya, a{2,3}b cocok dengan urutan "aab" target dan urutan "aaab"target , tetapi tidak cocok dengan urutan "ab" target atau urutan "aaaab"target .

Pergantian

Dalam semua tata bahasa ekspresi reguler kecuali basic dan grep, ekspresi reguler yang digabungkan dapat diikuti oleh karakter | (pipa) dan ekspresi reguler yang digabungkan lainnya. Sejumlah ekspresi reguler yang digabungkan dapat digabungkan dengan cara ini. Ekspresi yang dihasilkan cocok dengan urutan target apa pun yang cocok dengan satu atau beberapa ekspresi reguler yang digabungkan.

Ketika lebih dari satu ekspresi reguler yang digabungkan cocok dengan urutan target, ECMAScript memilih ekspresi reguler pertama yang digabungkan yang cocok dengan urutan sebagai kecocokan, yang akan disebut sebagai kecocokan pertama. Tata bahasa ekspresi reguler lainnya memilih yang mencapai kecocokan terpanjang.

Misalnya, ab|cd cocok dengan urutan "ab" target dan urutan "cd"target , tetapi tidak cocok dengan urutan "abd" target atau urutan "acd"target .

Dalam grep dan egrep, karakter baris baru (\n) dapat digunakan untuk memisahkan alternasi.

Subekspresi

Dalam basic dan grep, subekspresi adalah perangkaian. Dalam tata bahasa ekspresi reguler lainnya, subekspresi adalah pergantian.

Ringkasan tata bahasa

Tabel berikut ini meringkas fitur yang tersedia dalam berbagai tata bahasa ekspresi reguler:

Elemen basic extended ECMAScript grep egrep awk
alternation menggunakan | + + + +
alternation menggunakan \n + +
Jangkar + + + + + +
referensi kembali + + +
ekspresi tanda kurung + + + + + +
grup pengambilan menggunakan () + + + +
grup pengambilan menggunakan \(\) + +
urutan escape kontrol +
escape karakter dsw +
escape format file + +
urutan escape heksadesimal +
escape identitas + + + + + +
pernyataan negatif +
pernyataan batas kata negatif +
grup non-pengambilan +
pengulangan yang tidak serakah +
urutan escape oktal +
karakter biasa + + + + + +
pernyataan positif +
pengulangan menggunakan {} + + + +
pengulangan menggunakan \{\} + +
pengulangan menggunakan * + + + + + +
pengulangan menggunakan ? dan + + + + +
urutan escape unicode +
karakter kartubebas + + + + + +
pernyataan batas kata +

Detail semantik

Jangkar

Jangkar cocok dengan posisi dalam string target, bukan karakter. Cocok ^ dengan awal string target, dan $ cocok dengan akhir string target.

Referensi belakang

Referensi kembali adalah garis miring terbelakang yang diikuti oleh nilai desimal N. Ini cocok dengan konten grup pengambilan Nth. Nilai N tidak boleh lebih dari jumlah grup pengambilan yang mendahului referensi belakang. Dalam basic dan grep, nilai N ditentukan oleh digit desimal yang mengikuti garis miring terbelakang. Dalam ECMAScript, nilai N ditentukan oleh semua digit desimal yang segera mengikuti garis miring terbelakang. Oleh karena itu, dalam basic dan grep, nilai N tidak pernah lebih dari 9, bahkan jika ekspresi reguler memiliki lebih dari sembilan grup pengambilan. Dalam ECMAScript, nilai N tidak terbatas.

Contoh:

  • ((a+)(b+))(c+)\3 cocok dengan urutan "aabbbcbbb"target . Referensi \3 belakang cocok dengan teks dalam grup pengambilan ketiga, yaitu ."(b+)" Ini tidak cocok dengan urutan "aabbbcbb"target .

  • (a)\2 tidak valid.

  • (b(((((((((a))))))))))\10 memiliki arti yang berbeda dalam basic dan dalam ECMAScript. Dalam basic, referensi belakang adalah \1. Referensi belakang cocok dengan konten grup tangkapan pertama (yaitu, yang dimulai dengan dan berakhir dengan final ) dan datang sebelum referensi belakang), dan final 0 cocok dengan (b karakter 0biasa . Dalam ECMAScript, referensi belakang adalah \10. Ini cocok dengan grup pengambilan kesepuluh, yaitu yang paling dalam.

Ekspresi tanda kurung

Ekspresi tanda kurung mendefinisikan sekumpulan karakter dan elemen penyusunan. Ketika ekspresi tanda kurung dimulai dengan karakter ^ kecocokan berhasil jika tidak ada elemen dalam set yang cocok dengan karakter saat ini dalam urutan target. Jika tidak, kecocokan berhasil jika salah satu elemen dalam set cocok dengan karakter saat ini dalam urutan target.

Kumpulan karakter dapat ditentukan dengan mencantumkan kombinasi karakter individual, rentang karakter, kelas karakter, kelas kesetaraan, dan simbol penyusunan.

Grup pengambilan

Grup pengambilan menandai kontennya sebagai satu unit dalam tata bahasa ekspresi reguler dan memberi label teks target yang cocok dengan kontennya. Label yang terkait dengan setiap grup pengambilan adalah angka, yang ditentukan dengan menghitung tanda kurung pembuka yang menandai grup pengambilan hingga dan termasuk tanda kurung pembuka yang menandai grup pengambilan saat ini. Dalam implementasi ini, jumlah maksimum grup tangkapan adalah 31.

Contoh:

  • ab+ cocok dengan urutan "abb"target , tetapi tidak cocok dengan urutan "abab"target .

  • (ab)+ tidak cocok dengan urutan "abb"target , tetapi cocok dengan urutan "abab"target .

  • ((a+)(b+))(c+) cocok dengan urutan "aabbbc" target dan mengaitkan grup pengambilan 1 dengan berikutnya "aabbb", ambil grup 2 dengan berikutnya "aa", ambil grup 3 dengan "bbb", dan tangkap grup 4 dengan berikutnya "c".

Kelas karakter

Kelas karakter dalam ekspresi tanda kurung siku menambahkan semua karakter di kelas bernama ke kumpulan karakter yang ditentukan oleh ekspresi tanda kurung. Untuk membuat kelas karakter, gunakan [: diikuti dengan nama kelas , diikuti oleh :].

Secara internal, nama kelas karakter dikenali dengan memanggil id = traits.lookup_classname. Karakter ch milik kelas seperti itu jika traits.isctype(ch, id) mengembalikan true. Templat default regex_traits mendukung nama kelas dalam tabel berikut.

Nama Kelas Deskripsi
alnum huruf kecil, huruf besar, dan digit
alpha huruf kecil dan huruf besar
blank spasi atau tab
cntrl karakter escape format file
digit Digit
graph huruf kecil, huruf besar, digit, dan tanda baca
lower huruf kecil
print huruf kecil, huruf besar, digit, tanda baca, dan spasi
punct tanda baca
space space
upper karakter huruf besar
xdigit digits, a, , cb, d, e, f, , A, B, C, D, , E,F
d sama seperti digit
s sama seperti space
w sama seperti alnum

Rentang karakter

Rentang karakter dalam ekspresi tanda kurung menambahkan semua karakter dalam rentang ke kumpulan karakter yang ditentukan oleh ekspresi tanda kurung. Untuk membuat rentang karakter, letakkan karakter antara karakter '-' pertama dan terakhir dalam rentang. Rentang karakter menempatkan semua karakter yang memiliki nilai numerik yang lebih dari atau sama dengan nilai numerik karakter pertama, dan kurang dari atau sama dengan nilai numerik karakter terakhir, ke dalam set. Perhatikan bahwa kumpulan karakter yang ditambahkan ini tergantung pada representasi karakter khusus platform. Jika karakter '-' terjadi di awal atau akhir ekspresi tanda kurung siku, atau sebagai karakter pertama atau terakhir dari rentang karakter, karakter mewakili dirinya sendiri.

Contoh:

  • [0-7]mewakili sekumpulan karakter { 0, , 1, 2, 43, 5, 6, 7 }. Ini cocok dengan urutan "0"target , , "1"dan sebagainya, tetapi tidak "a".

  • Pada sistem yang menggunakan pengodean karakter ASCII, [h-k] mewakili sekumpulan karakter { h, , i, kj}. Ini cocok dengan urutan "h"target , , "i"dan sebagainya, tetapi tidak "\x8A" atau "0".

  • Pada sistem yang menggunakan pengodean karakter EBCDIC, [h-k] mewakili sekumpulan karakter { h, , , '\x8B''\x8E''\x8D''\x8A''\x90'i'\x8C''\x8F', j, } k (h dikodekan sebagai 0x88 dan k dikodekan sebagai ).0x92 Ini cocok dengan urutan "h"target , , "i", "\x8A"dan sebagainya, tetapi tidak "0".

  • [-0-24]mewakili sekumpulan karakter { -, , 0, 1, 42} .

  • [0-2-]mewakili sekumpulan karakter { 0, 1, , -2}.

  • Pada sistem yang menggunakan pengodean karakter ASCII, [+--] mewakili sekumpulan karakter { +,- }.

Namun, ketika rentang sensitif lokal digunakan, karakter dalam rentang ditentukan oleh aturan kolaborasi untuk lokal. Karakter yang menyusun setelah karakter pertama dalam definisi rentang dan sebelum karakter terakhir dalam definisi rentang berada dalam set. Dua karakter akhir juga berada dalam set.

Menyusun elemen

Elemen penyusunan adalah urutan multi-karakter yang diperlakukan sebagai karakter tunggal.

Simbol kolagen

Simbol kolase dalam ekspresi kurung siku menambahkan elemen penyusunan ke set yang ditentukan oleh ekspresi tanda kurung siku. Untuk membuat simbol penyusunan, gunakan [. diikuti dengan elemen penyusunan, diikuti oleh .]

Mengontrol urutan escape

Urutan escape kontrol adalah garis miring terbalik diikuti dengan huruf 'c' diikuti oleh salah satu huruf 'a' melalui 'z' atau 'A' melalui 'Z'. Ini cocok dengan karakter kontrol ASCII yang dinamai oleh huruf itu. Misalnya, "\ci" cocok dengan urutan "\x09"target , karena Ctrl+I memiliki nilai 0x09.

Escape karakter DSW

Escape karakter dsw adalah nama pendek untuk kelas karakter, seperti yang ditunjukkan dalam tabel berikut.

Urutan Escape Kelas Bernama Yang Setara Kelas Bernama Default
\d [[:d:]] [[:digit:]]
\D [^[:d:]] [^[:digit:]]
\s [[:s:]] [[:space:]]
\S [^[:s:]] [^[:space:]]
\w [[:w:]] [a-zA-Z0-9_]*
\W [^[:w:]] [^a-zA-Z0-9_]*

*Set karakter ASCII

Kelas kesetaraan

Kelas kesetaraan dalam ekspresi tanda kurung menambahkan semua karakter dan elemen penyusunan yang setara dengan elemen penyusunan dalam definisi kelas kesetaraan ke set yang ditentukan oleh ekspresi braket.

Untuk membuat kelas kesetaraan, gunakan [= diikuti dengan elemen penyusunan diikuti oleh =]. Secara internal, dua elemen elt1 penyusunan dan elt2 setara jika traits.transform_primary(elt1.begin(), elt1.end()) == traits.transform_primary(elt2.begin(), elt2.end()).

Escape format file

Escape format file terdiri dari urutan escape karakter bahasa C biasa, \\, , \a, \f\b, \n, \r, \t, . \v Ini memiliki arti yang biasa, yaitu, garis miring terbelakang, pemberitahuan, backspace, umpan formulir, garis baru, pengembalian pengangkutan, tab horizontal, dan tab vertikal, masing-masing. Di ECMAScript, \a dan \b tidak diizinkan. (\\ diperbolehkan, tetapi ini adalah escape identitas, bukan escape format file).

Urutan escape heksadesimal

Urutan escape heksadesimal adalah garis miring terbalik diikuti oleh huruf x diikuti oleh dua digit heksadesimal (0-9a-fA-F). Ini cocok dengan karakter dalam urutan target yang memiliki nilai yang ditentukan oleh dua digit.

Misalnya, "\x41" cocok dengan urutan "a" target saat pengodean karakter ASCII digunakan.

Escape identitas

Escape identitas adalah garis miring terbelakang diikuti oleh satu karakter. Ini cocok dengan karakter itu. Diperlukan ketika karakter memiliki arti khusus. Menggunakan escape identitas menghapus arti khusus. Contohnya:

  • a* cocok dengan urutan "aaa"target , tetapi tidak cocok dengan urutan "a*"target .

  • a\* tidak cocok dengan urutan "aaa"target , tetapi cocok dengan urutan "a*"target .

Kumpulan karakter yang diizinkan dalam escape identitas bergantung pada tata bahasa ekspresi reguler, seperti yang ditunjukkan dalam tabel berikut.

Tatabahasa Karakter Escape Identitas yang Diizinkan
basic, grep { (){}.[\*^$ }
extended, egrep { (){.[\*^$+?| }
awk, extended plus { "/ }
ECMAScript Semua karakter kecuali karakter yang dapat menjadi bagian dari pengidentifikasi. Biasanya, ini termasuk huruf, digit, $, _, dan urutan escape unicode. Untuk informasi selengkapnya, lihat ECMAScript Spesifikasi Bahasa.

Karakter individual

Karakter individual dalam ekspresi tanda kurung siku menambahkan karakter tersebut ke kumpulan karakter yang ditentukan oleh ekspresi tanda kurung. Di mana saja dalam ekspresi tanda kurung kecuali di awal, mewakili ^ dirinya sendiri.

Contoh:

  • [abc] cocok dengan urutan "a"target , , "b"dan "c", tetapi bukan urutan "d".

  • [^abc] cocok dengan urutan "d"target , tetapi bukan urutan "a"target , , "b"atau "c".

  • [a^bc] cocok dengan urutan "a"target , , "b", "c"dan "^", tetapi bukan urutan "d"target .

Dalam semua tata bahasa ekspresi reguler kecuali ECMAScript, jika adalah ] karakter pertama yang mengikuti pembukaan [ atau adalah karakter pertama yang mengikuti awal ^, itu mewakili dirinya sendiri.

Contoh:

  • []a tidak valid karena tidak ] ada untuk mengakhiri ekspresi tanda kurung siku.

  • []abc] cocok dengan urutan "a"target , , "b", "c"dan "]", tetapi bukan urutan "d"target .

  • [^]abc] cocok dengan urutan "d"target , tetapi bukan urutan "a"target , , "b", "c"atau "]".

Dalam ECMAScript, gunakan \] untuk mewakili karakter ] dalam ekspresi tanda kurung siku.

Contoh:

  • []a cocok dengan urutan "a" target karena ekspresi tanda kurung kosong.

  • [\]abc] cocok dengan urutan "a"target , , "b", "c"dan "]" tetapi bukan urutan "d"target .

Pernyataan negatif

Pernyataan negatif cocok dengan apa pun kecuali kontennya. Ini tidak menggunakan karakter apa pun dalam urutan target.

Misalnya, (!aa)(a*) cocok dengan urutan "a" target dan mengaitkan grup pengambilan 1 dengan berikutnya "a". Ini tidak cocok dengan urutan "aa" target atau urutan "aaa"target .

Pernyataan batas kata negatif

Pernyataan batas kata negatif cocok jika posisi saat ini dalam string target tidak segera setelah batas kata.

Grup non-pengambilan

Grup non-pengambilan menandai kontennya sebagai satu unit dalam tata bahasa ekspresi reguler, tetapi tidak memberi label teks target.

Misalnya, (a)(?:b)*(c) cocok dengan teks "abbc" target dan mengaitkan ambil grup 1 dengan grup berikutnya "a" dan ambil grup 2 dengan berikutnya "c".

Pengulangan yang tidak serakah

Pengulangan yang tidak serakah mengonsumsi urutan target terpendek yang cocok dengan pola. Pengulangan serakah mengonsumsi yang terpanjang. Misalnya, (a+)(a*b) cocok dengan urutan "aaab"target .

Ketika pengulangan yang tidak serakah digunakan, ia mengaitkan grup pengambilan 1 dengan urutan berikutnya "a" di awal urutan target dan menangkap grup 2 dengan urutan berikutnya "aab" di akhir urutan target.

Ketika kecocokan serakah digunakan, ia mengaitkan grup pengambilan 1 dengan grup berikutnya "aaa" dan menangkap grup 2 dengan berikutnya "b".

Urutan escape oktal

Urutan pelarian oktal adalah garis miring terbalik diikuti oleh satu, dua, atau tiga digit oktal (0-7). Ini cocok dengan karakter dalam urutan target yang memiliki nilai yang ditentukan oleh digit tersebut. Jika semua digit adalah 0, urutannya tidak valid.

Misalnya, \101 cocok dengan urutan "a" target saat pengodean karakter ASCII digunakan.

Karakter biasa

Karakter biasa adalah karakter valid apa pun yang tidak memiliki arti khusus dalam tata bahasa saat ini.

Dalam ECMAScript, karakter berikut memiliki arti khusus:

  • ^ $ \ . * + ? ( ) [ ] { } |

Dalam basic dan grep, karakter berikut memiliki arti khusus:

  • . [ \

Juga dalam basic dan grep, karakter berikut memiliki arti khusus saat digunakan dalam konteks tertentu:

  • * memiliki arti khusus dalam semua kasus kecuali ketika karakter pertama dalam ekspresi reguler atau karakter pertama yang mengikuti awal ^ dalam ekspresi reguler, atau ketika itu adalah karakter pertama dari grup pengambilan atau karakter pertama yang mengikuti awal ^ dalam grup pengambilan.

  • ^ memiliki arti khusus ketika itu adalah karakter pertama dari ekspresi reguler.

  • $ memiliki arti khusus ketika itu adalah karakter terakhir dari ekspresi reguler.

Dalam extended, egrep, dan awk, karakter berikut memiliki arti khusus:

  • . [ \ ( * + ? { |

Juga dalam extended, egrep, dan awk, karakter berikut memiliki arti khusus saat digunakan dalam konteks tertentu.

  • ) memiliki arti khusus ketika cocok dengan yang sebelumnya (

  • ^ memiliki arti khusus ketika itu adalah karakter pertama dari ekspresi reguler.

  • $ memiliki arti khusus ketika itu adalah karakter terakhir dari ekspresi reguler.

Karakter biasa cocok dengan karakter yang sama dalam urutan target. Secara default, ini berarti bahwa kecocokan berhasil jika dua karakter diwakili oleh nilai yang sama. Dalam kecocokan yang tidak peka huruf besar/kecil, dua karakter ch0 dan ch1 cocok jika traits.translate_nocase(ch0) == traits.translate_nocase(ch1). Dalam kecocokan sensitif lokal, dua karakter ch0 dan ch1 cocok jika traits.translate(ch0) == traits.translate(ch1).

Pernyataan positif

Pernyataan positif cocok dengan kontennya, tetapi tidak menggunakan karakter apa pun dalam urutan target.

Contoh:

  • (=aa)(a*) cocok dengan urutan "aaaa" target dan mengaitkan grup pengambilan 1 dengan berikutnya "aaaa".

  • (aa)(a*) mencocokkan urutan "aaaa" target dan mengaitkan grup pengambilan 1 dengan urutan berikutnya "aa" di awal urutan target dan menangkap grup 2 dengan urutan berikutnya "aa" di akhir urutan target.

  • (=aa)(a)|(a) cocok dengan urutan "a" target dan mengaitkan grup pengambilan 1 dengan urutan kosong (karena pernyataan positif gagal) dan menangkap grup 2 dengan urutan berikutnya "a". Ini juga cocok dengan urutan "aa" target dan mengaitkan penangkapan grup 1 dengan urutan berikutnya "aa" dan menangkap grup 2 dengan urutan kosong.

Urutan escape Unicode

Urutan pelarian unicode adalah garis miring terbalik diikuti oleh huruf 'u' diikuti oleh empat digit heksadesimal (0-9a-fA-F). Ini cocok dengan karakter dalam urutan target yang memiliki nilai yang ditentukan oleh empat digit. Misalnya, \u0041 cocok dengan urutan "a" target saat pengodean karakter ASCII digunakan.

Katakter kartubebas

Karakter kartubebas cocok dengan karakter apa pun dalam ekspresi target kecuali baris baru.

Batas kata

Batas kata terjadi dalam situasi berikut:

  • Karakter saat ini berada di awal urutan target dan merupakan salah satu karakter kata A-Za-z0-9_

  • Posisi karakter saat ini melewati akhir urutan target dan karakter terakhir dalam urutan target adalah salah satu karakter kata.

  • Karakter saat ini adalah salah satu karakter kata dan karakter sebelumnya tidak.

  • Karakter saat ini bukan salah satu karakter kata dan karakter sebelumnya adalah.

Batas kata menegaskan

Pernyataan batas kata cocok ketika posisi saat ini dalam string target segera setelah batas kata.

Pencocokan dan pencarian

Agar ekspresi reguler sesuai dengan urutan target, seluruh ekspresi reguler harus cocok dengan seluruh urutan target. Misalnya, ekspresi bcd reguler cocok dengan urutan "bcd" target tetapi tidak cocok dengan urutan "abcd" target atau urutan "bcde"target .

Agar pencarian ekspresi reguler berhasil, harus ada urutan berikutnya di suatu tempat dalam urutan target yang cocok dengan ekspresi reguler. Pencarian biasanya menemukan subsekuensi yang paling cocok di sebelah kiri.

Contoh:

  • Pencarian untuk ekspresi bcd reguler dalam urutan "bcd" target berhasil dan cocok dengan seluruh urutan. Pencarian yang sama dalam urutan "abcd" target juga berhasil dan cocok dengan tiga karakter terakhir. Pencarian yang sama dalam urutan "bcde" target juga berhasil dan cocok dengan tiga karakter pertama.

  • Pencarian untuk ekspresi bcd reguler dalam urutan "bcdbcd" target berhasil dan cocok dengan tiga karakter pertama.

Jika ada lebih dari satu subsekuen yang cocok di beberapa lokasi dalam urutan target, ada dua cara untuk memilih pola pencocokan.

Kecocokan pertama memilih suburut yang ditemukan terlebih dahulu saat ekspresi reguler dicocokkan.

Kecocokan terpanjang memilih subsekuensi terpanjang dari yang cocok di lokasi tersebut. Jika ada lebih dari satu berikutnya yang memiliki panjang maksimal, kecocokan terpanjang memilih yang ditemukan terlebih dahulu.

Misalnya, ketika kecocokan pertama digunakan, pencarian ekspresi b|bc reguler dalam urutan "abcd" target cocok dengan urutan berikutnya "b" karena istilah sebelah kiri dari kecocokan alternasi yang berikutnya; oleh karena itu, kecocokan pertama tidak mencoba istilah kanan pergantian. Ketika kecocokan terpanjang digunakan, pencarian yang sama cocok "bc" karena "bc" lebih panjang dari "b".

Kecocokan parsial berhasil jika kecocokan mencapai akhir urutan target tanpa gagal, bahkan jika belum mencapai akhir ekspresi reguler. Oleh karena itu, setelah kecocokan parsial berhasil, menambahkan karakter ke urutan target dapat menyebabkan kecocokan parsial selanjutnya gagal. Namun, setelah kecocokan parsial gagal, menambahkan karakter ke urutan target tidak dapat menyebabkan kecocokan parsial selanjutnya berhasil. Misalnya, dengan kecocokan parsial, ab cocok dengan urutan "a" target tetapi tidak "ac".

Format bendera

ECMAScript Aturan Format Aturan Format sed Teks Pengganti
$& & Urutan karakter yang cocok dengan seluruh ekspresi reguler: [match[0].first, match[0].second)
$$ $
\& &
$`" (tanda dolar diikuti dengan kutipan balik) Urutan karakter yang mendahului urutan berikutnya yang cocok dengan ekspresi reguler: [match.prefix().first, match.prefix().second)
$'" (tanda dolar diikuti dengan kuotasi terusan) Urutan karakter yang mengikuti urutan berikutnya yang cocok dengan ekspresi reguler: [match.suffix().first, match.suffix().second)
$n \n Urutan karakter yang cocok dengan grup pengambilan pada posisi n, di mana n adalah angka antara 0 dan 9: [match[n].first, match[n].second)
\\n \n
$nn Urutan karakter yang cocok dengan grup pengambilan pada posisi nn, di mana nn adalah angka antara 10 dan 99: [match[nn].first, match[nn].second)

Baca juga

Gambaran Umum Pustaka Standar C++