Reg comp php yang kikuk. Man regcomp(3): Fungsi ekspresi reguler POSIX

> int regcomp(regex_t * preg, karakter konstan *ekspresi reguler, ke dalam cflag); int regexec(konstan regex_t *preg, karakter konstan *rangkaian, ukuran_t tidak cocok, pertandingan ulang_t pertandingan, ke dalam bendera); kesalahan ukuran_t(int kode kesalahan, konstanta regex_t *preg, karakter *kesalahan, ukuran_t errbuf_size); batalkan regfree(regex_t *preg);

Keterangan

Kompilasi regex POSIX regcomp() digunakan untuk mengkompilasi ekspresi reguler ke dalam bentuk yang sesuai untuk selanjutnya regexec() pencarian.

regcomp() disertakan dengan preg, penunjuk ke tempat penyimpanan buffer pola; ekspresi reguler, penunjuk ke string yang diakhiri dengan nol dan cflag, tanda yang digunakan untuk menentukan jenis kompilasi.

Oleh karena itu, semua pencarian ekspresi reguler harus dilakukan melalui buffer pola yang dikompilasi regexec() harus selalu dilengkapi dengan alamat a regcomp() buffer pola yang diinisialisasi.

cflag mungkin bitwise- atau dari satu atau lebih hal berikut: REG_EXTENDED Menggunakan POSIX Sintaks Regular Expression yang diperluas saat menafsirkan ekspresi reguler. Jika tidak disetel POSIX Sintaks Regular Expression dasar digunakan. REG_ICASE Jangan membeda-bedakan kasus. Setelah regexec() pencarian menggunakan buffer pola ini tidak membedakan huruf besar-kecil. REG_NOSUB Jangan laporkan posisi pertandingan. Itu tidak cocok Dan pertandingan argumen untuk regexec() diabaikan jika buffer pola yang disediakan dikompilasi dengan kumpulan tanda ini. REG_NEWLINE Operator pencocokan karakter apa pun tidak cocok dengan baris baru.

Daftar yang tidak cocok ( [^...] ) tidak mengandung baris baru tidak cocok dengan baris baru.

Operator garis awal pertandingan ( ^ ) cocok dengan string kosong segera setelah baris baru, terlepas dari apakah bendera, bendera eksekusi regexec(), mengandung REG_NOTBOL.

Operator pencocokan akhir jalur ( $ ) cocok dengan string kosong tepat sebelum baris baru, terlepas dari apakah atau tidak bendera mengandung REG_NOTEOL.

Pencocokan ekspresi reguler POSIX regexec() digunakan untuk mencocokkan string yang diakhiri dengan null terhadap buffer pola yang telah dikompilasi, preg. tidak cocok Dan pertandingan digunakan untuk memberikan informasi mengenai lokasi pertandingan apa pun. bendera mungkin bitwise- atau dari salah satu atau keduanya REG_NOTBOL Dan REG_NOTEOL yang menyebabkan perubahan perilaku pencocokan yang dijelaskan di bawah. REG_NOTBOL Operator baris awal yang cocok selalu gagal mencocokkan (tetapi lihat tanda kompilasi REG_NEWLINE di atas) Bendera ini dapat digunakan ketika bagian string yang berbeda diteruskan regexec() dan awal string tidak boleh diartikan sebagai awal baris. REG_NOTEOL Operator match-end-of-line selalu gagal mencocokkan (tetapi lihat tanda kompilasi REG_NEWLINE di atas)

Offset byte Kecuali REG_NOSUB ditetapkan untuk kompilasi buffer pola, dimungkinkan untuk memperoleh informasi pengalamatan yang cocok. pertandingan harus berdimensi untuk memiliki setidaknya tidak cocok elemen. Ini diisi oleh regexec() dengan alamat pencocokan substring. Offset subekspresi yang dimulai dari Saya tanda kurung buka disimpan di pertandingan[i]. Seluruh alamat kecocokan ekspresi reguler disimpan di pertandingan. (Perhatikan bahwa untuk mengembalikan offset N kecocokan subekspresi, tidak cocok setidaknya harus T+1.) Setiap elemen struktur yang tidak digunakan akan berisi nilai -1.

Itu pertandingan ulang_t struktur yang merupakan jenis pertandingan didefinisikan dalam .

Struktur Typedef ( regoff_t rm_so; regoff_t rm_eo; ) regmatch_t; Setiap rm_so elemen yang bukan -1 menunjukkan offset awal dari kecocokan substring terbesar berikutnya dalam string. Relatif rm_eo elemen menunjukkan offset akhir pencocokan, yang merupakan offset karakter pertama setelah teks yang cocok.

Pelaporan kesalahan POSIX kesalahan() digunakan untuk mengubah kode kesalahan yang dapat dikembalikan oleh keduanya regcomp() Dan regexec() menjadi string pesan kesalahan.

kesalahan() melewati kode kesalahan, kode kesalahan, penyangga pola, preg, penunjuk ke buffer string karakter, kesalahan, dan ukuran buffer string, errbuf_size. Ini mengembalikan ukuran kesalahan diperlukan untuk memuat string pesan kesalahan yang diakhiri dengan null. Jika keduanya kesalahan Dan errbuf_size bukan nol, kesalahan diisi dengan yang pertama errbuf_size - 1 karakter pesan kesalahan dan penghentian byte nol ("\0").

Pembebasan buffer pola POSIX Memasok bebas peraturan() dengan buffer pola yang telah dikompilasi, preg akan mengosongkan memori yang dialokasikan ke buffer pola dengan proses kompilasi, regcomp().

Nilai Pengembalian

regcomp() mengembalikan nol untuk kompilasi yang berhasil atau kode kesalahan untuk kegagalan.

regexec() mengembalikan nol untuk kecocokan yang berhasil atau REG_NOMATCH untuk kegagalan.

Kesalahan

Kesalahan berikut dapat dikembalikan dengan regcomp(): REG_BADBR Penggunaan operator referensi belakang tidak valid. REG_BADPAT Penggunaan operator pola seperti grup atau daftar tidak valid. REG_BADRPT Penggunaan operator pengulangan seperti penggunaan "*" sebagai karakter pertama tidak valid. REG_EBRACE Operator interval kurung kurawal yang tidak cocok. REG_EBRACK Operator daftar braket yang tidak cocok. REG_ECOLLATE Elemen penyusunan tidak valid. REG_ECTYPE Nama kelas karakter tidak diketahui. REG_EEND Kesalahan nonspesifik. Ini tidak ditentukan oleh POSIX.2. REG_EESCAPE Garis miring terbalik. REG_EPAREN Operator grup tanda kurung tidak cocok. REG_ERANGE Penggunaan operator rentang tidak valid, misalnya titik akhir rentang terjadi sebelum titik awal. REG_ESIZE Ekspresi reguler yang dikompilasi memerlukan buffer pola yang lebih besar dari 64Kb. Ini tidak ditentukan oleh POSIX.2. REG_ESPACE Rutinitas regex kehabisan memori. REG_ESUBREG Referensi kembali ke subekspresi tidak valid.

Untuk bekerja dengan ekspresi reguler di C/C++, perpustakaan regex.h telah dibuat. Ini menentukan fungsi utama:

#termasuk int regcomp (regex_t *batasi preg, const char *batasi pola, int cflags); int regexec (const regex_t *batasi preg, const char *batasi string, size_t nmatch, regmatch_t pmatch , int eflags); batalkan regfree (regex_t *preg); size_t regerror (int kode kesalahan, const regex_t *batasi preg, char *batasi errbuf, size_t errbuf_size);

Fungsi regcomp dimaksudkan untuk mengkompilasi ekspresi reguler. Fungsi ini mengkompilasi pola ekspresi reguler yang diberikan cflags dan menempatkannya dalam struktur preg.
Bendera dapat disusun secara bitwise atau elemen berikut:

  • REG_EXTENDED - gunakan ekspresi reguler yang diperluas
  • REG_ICASE - jangan membedakan antara huruf besar dan kecil saat mencocokkan string dengan ekspresi reguler

Fungsi regexec cocok dengan ekspresi reguler yang dikompilasi dan ditempatkan dalam struktur preg dengan string string. Dalam hal ini, jika perbandingan berhasil, nilai nol akan dikembalikan; jika tidak, kode kesalahan akan dikembalikan. Argumen eflags adalah OR bitwise dari REG_NOTBOL dan REG_NOTEOL. Ini menentukan apakah batas rantai adalah batas garis (untuk menangani kait ^ dan $). Jika argumen nmatch adalah nol, maka pmatch diabaikan, jika tidak maka harus menunjuk ke array elemen nmatch, yang akan diisi dengan offset substring.

Untuk mendekripsi kesalahan, gunakan fungsinya kesalahan(). Ini mengkonversi kode kesalahan yang dikembalikan dengan mencocokkan ekspresi reguler dan string dan menempatkan nilai string kesalahan dalam variabel errbuf, menentukan ukurannya.

Fungsi bebas kebebasan() membebaskan memori yang diminta saat mengkompilasi ekspresi reguler. Penunjuk ke struktur ekspresi reguler tidak dapat digunakan setelah ini...

Mari kita lihat sebuah contoh:

#termasuk #termasuk menggunakan namespace std; #define POLA "^(0,3).(0,3).(0,3).(0,3)$" #define STRING "127.0.0.1" int main() ( regex_t preg; int err,regerr ; err = regcomp(&preg, POLA, REG_EXTENDED); if (err != 0) ( char buff; regerror(err, &preg, buff, sizeof(buff)); cout<< buff; } regmatch_t pm; regerr = regexec (&preg, STRING, 0, &pm, 0); if (regerr == 0) cout << "true"; else { cout << "false\n"; char errbuf; regerror(regerr, &preg, errbuf, sizeof(errbuf)); cout << errbuf; } return 0; }

Fungsi ini merupakan fungsi paling sederhana untuk pengenalan alamat IP. Dengan menggunakan direktif definisikan, kami telah mendefinisikan string dengan ekspresi reguler dan string untuk diperiksa. Dalam fungsi utama, ekspresi reguler PATTERN pertama kali dikompilasi dan ditempatkan ke dalam struktur preg. Kami segera memeriksa kesalahan dan jika ada, menampilkannya di layar. Setelah ini, kami membandingkan string STRING dengan ekspresi reguler di preg. Jika ada kecocokan, kami menampilkan "benar", jika tidak - "salah" dan menguraikan kesalahan menggunakan regerror.

Format

#termasuk int regcomp(regex_t *_restrict_ preg, karakter konstan *_restrict_ pola, ke dalam cflag);

Gambaran umum

Mengkompilasi ekspresi reguler yang ditentukan oleh pola menjadi string kode op yang dapat dieksekusi.

preg adalah penunjuk ke ekspresi reguler yang dikompilasi.

pola adalah penunjuk ke string karakter yang mendefinisikan ekspresi reguler sumber (dijelaskan di bawah).

cflag adalah tanda bit yang mendefinisikan atribut proses kompilasi yang dapat dikonfigurasi: REG_EXTENDED Mendukung ekspresi reguler yang diperluas. REG_ICASE Abaikan huruf besar/kecil dalam pertandingan. REG_NEWLINE Hilangkan arti khusus apa pun pada karakter baris baru. REG_NOSUB Laporkan hanya keberhasilan atau kegagalan di regexec(), yaitu memverifikasi sintaks ekspresi reguler. Jika tanda ini disetel, fungsi regcomp() akan disetel re_nsub dengan jumlah sub-ekspresi dalam tanda kurung yang ditemukan di pola. Jika tidak, sub-ekspresi akan menghasilkan kesalahan.

Fungsi regcomp() pada z/OS XL C/C++ akan menggunakan definisi karakter sesuai dengan kategori LC_SYNTAX saat ini. Karakter, [ , ] , ( , ) , | , ^ , dan $ , memiliki titik kode yang berbeda-beda dalam kumpulan karakter yang dikodekan berbeda.

Ekspresi reguler

Fungsi regcomp(), regerror(), regexec(), dan regfree() menggunakan ekspresi reguler dengan cara yang mirip dengan perintah UNIX awk, ed, grep, dan egrep.

Bentuk ekspresi reguler yang paling sederhana adalah serangkaian karakter tanpa arti khusus. Karakter berikut memang memiliki arti khusus; mereka digunakan untuk membentuk ekspresi reguler yang diperluas: Simbol Keterangan. Simbol titik cocok dengan satu karakter apa pun kecuali karakter baris baru terminal. [ karakterkarakter] Simbol tanda hubung, dalam tanda kurung siku, berarti “melalui”. Ini mengisi karakter intervensi sesuai dengan urutan penyusunan saat ini. Misalnya, dapat setara dengan atau, dengan urutan penyusunan yang berbeda, dapat setara dengan . [ rangkaian] String dalam tanda kurung siku menentukan karakter mana pun di dalamnya rangkaian. Jadi, jika dibandingkan dengan string lain, akan cocok dengan string apa pun yang berisi a, b, atau c.

Tidak ada asumsi yang dibuat pada waktu kompilasi tentang karakter sebenarnya yang terdapat dalam rentang tersebut.

{M} {M,} {M,kamu) Nilai bilangan bulat yang diapit () menunjukkan berapa kali ekspresi reguler sebelumnya diterapkan. M adalah angka minimum, dan kamu adalah angka maksimum. kamu tidak boleh lebih besar dari RE_DUP_MAX (lihat batas.h).

Jika Anda menentukan saja M, ini menunjukkan berapa kali tepatnya ekspresi reguler diterapkan. ( M,) setara dengan ( m, kamu). Keduanya cocok dengan m atau lebih kemunculan ekspresi.

* Simbol asterisk menunjukkan 0 atau lebih karakter apa pun. Misalnya, [ a*e ] setara dengan salah satu dari berikut ini: 99ae9, aaaaae, a999e99. $ Simbol dolar cocok dengan akhir string. (Gunakan \n untuk mencocokkan karakter baris baru.) karakter+ Simbol plus menentukan satu atau lebih kemunculan karakter. Jadi, smith+ern setara dengan, misalnya, smithhhern . [^ rangkaian] Simbol tanda sisipan, jika berada di dalam tanda kurung siku, meniadakan karakter di dalam tanda kurung siku. Jadi [^abc] , jika dibandingkan dengan string lain, akan terjadi gagal untuk mencocokkan apa pun yang berisi satu a, b, atau c. ( ekspresi)$N Menyimpan nilai yang cocok dengan ekspresi reguler terlampir di ( N+1) th membasahi parameter. Sepuluh ekspresi reguler tertutup diperbolehkan. Penugasan dilakukan tanpa syarat. ( ekspresi) Mengelompokkan sub-ekspresi yang memungkinkan operator, seperti *, +, atau .], untuk mengerjakan sub-ekspresi yang diapit tanda kurung. Misalnya, (a*(cb+)*)$0 .

Catatan:

  1. Melakukan bukan menggunakan karakter multibyte.
  2. Anda dapat menggunakan ] (kurung siku kanan) sendirian di dalam sepasang tanda kurung siku, namun hanya jika tanda kurung siku tersebut langsung mengikuti tanda kurung siku kiri pembuka atau jika tanda kurung siku tersebut langsung mengikuti [^. Misalnya: –] cocok dengan karakter ] dan –.
  3. Semua simbol sebelumnya adalah spesial. Anda mengawalinya dengan \untuk menggunakan simbol itu sendiri. Misalnya, a\.e setara dengan a.e .
  4. Anda dapat menggunakan – (tanda hubung) dengan sendirinya, tetapi hanya jika itu adalah karakter pertama atau terakhir dalam ekspresi. Misalnya, ekspresi --0] cocok dengan ] atau karakter lainnya – hingga 0. Jika tidak, gunakan \–.

Nilai yang dikembalikan

Jika berhasil, regcomp() mengembalikan 0.

Jika tidak berhasil, regcomp() mengembalikan bukan nol, dan kontennya preg tidak terdefinisi.

Contoh

SELEBRI07⁄* CELEBR07 Contoh ini mengkompilasi ekspresi reguler yang diperluas. *⁄ #sertakan #termasuk #termasuk #termasuk main() ( regex_t preg; char *string = "string sederhana"; char *pattern = ".*(sederhana).*"; int rc; if ((rc = regcomp(&preg, pattern, REG_EXTENDED)) != 0) ( printf("regcomp() gagal, mengembalikan bukan nol (%d)", rc); exit(1); ) )

> int regcomp(regex_t *preg, karakter konstan *ekspresi reguler, ke dalamcflag); int regexec(konstan regex_t *preg, karakter konstan *rangkaian, ukuran_ttidak cocok, pertandingan ulang_tpertandingan, ke dalambendera); kesalahan ukuran_t(intkode kesalahan, konstanta regex_t *preg, karakter *kesalahan, ukuran_terrbuf_size); batalkan regfree(regex_t *preg);

KETERANGAN

Mengompilasi ekspresi reguler POSIX

Fungsi regcomp() digunakan untuk mengkompilasi ekspresi reguler ke dalam format yang sesuai untuk penggunaan pencarian selanjutnya regexec().

regcomp() sebuah penunjuk ke tempat penyimpanan template buffer diteruskan preg, penunjuk ke string yang diakhiri dengan null ekspresi reguler dan bendera cflag, digunakan untuk menentukan jenis kompilasi.

Semua pencarian ekspresi reguler harus dilakukan menggunakan pola buffer yang dikompilasi regexec() harus selalu dipanggil dengan alamat template buffer yang diinisialisasi oleh fungsi tersebut regcomp().

Arti cflag mungkin terdiri dari bitwise atau nol atau lebih dari nilai berikut: REG_EXTENDED Gunakan sintaks ekspresi reguler yang diperluas POSIX selama interpretasi ekspresi reguler. Jika tanda ini tidak diaktifkan, sintaks ekspresi reguler sederhana POSIX akan digunakan. REG_ICASE Abaikan kasus. Pencarian selanjutnya regexec() menggunakan pola buffer ini tidak akan peka huruf besar-kecil. REG_NOSUB Jangan laporkan posisi pertandingan. Pilihan tidak cocok Dan pertandingan Untuk regexec() diabaikan jika template buffer yang diberikan dikompilasi dengan flag ini diaktifkan. REG_NEWLINE Operator pencocokan dengan karakter apa pun tidak cocok dengan karakter baris baru. Daftar karakter yang tidak cocok ( [^...] ) tanpa karakter baris baru tidak cocok dengan baris baru. Operator perbandingan berdasarkan awal string ( ^ ) cocok dengan string kosong segera setelah baris baru, apa pun yang terjadi bendera, bendera eksekusi regexec(), berisi REG_NOTBOL. Operator perbandingan akhir baris ($) mencocokkan string kosong hingga awal baris, apa pun yang terjadi bendera mengandung REG_NOTEOL.

Perbandingan dengan ekspresi reguler POSIX

Fungsi regexec() digunakan untuk membandingkan string yang diakhiri dengan null dengan pola buffer yang telah diproses sebelumnya preg. Argumen tidak cocok Dan pertandingan digunakan untuk memberikan informasi tentang lokasi pertandingan apa pun. Arti bendera bisa bitwise ATAU satu atau kedua nilai REG_NOTBOL Dan REG_NOTEOL. Nilai-nilai ini menentukan perilaku proses perbandingan seperti yang dijelaskan di bawah ini. REG_NOTBOL Operator perbandingan di awal string selalu gagal (lihat flag kompilasi yang dijelaskan di atas REG_NEWLINE). Bendera ini dapat digunakan ketika regexec() bagian-bagian terpisah dari sebuah string ditransmisikan, dan awal dari string tersebut dalam hal ini tidak boleh ditafsirkan sebagai awal dari baris baru. REG_NOTEOL Operator perbandingan akhir baris selalu gagal (tetapi lihat tanda kompilasi yang dijelaskan di atas REG_NEWLINE).

Offset byte

Jika REG_NOSUB tidak diatur saat mengkompilasi template buffer, dimungkinkan untuk memperoleh informasi tentang posisi kecocokan. Arti pertandingan harus didefinisikan memiliki setidaknya tidak cocok elemen. Mereka sedang mengisi regexec() alamat kecocokan inline. Offset dari subekspresi yang dimulai dengan Saya braket terbuka, disimpan di pertandingan[i]. Alamat kecocokan dari seluruh ekspresi reguler disimpan pertandingan(perhatikan bahwa untuk mengembalikan offset kecocokan N subekspresi, makna tidak cocok harus tidak kurang T+1). Setiap elemen struktur yang tidak digunakan akan berisi nilai -1.

Struktur pertandingan ulang_t, yang merupakan tipe pertandingan, didefinisikan dalam :

struktur typedef(
regoff_t rm_so;
regoff_t rm_eo;) regmatch_t;

Setiap elemen rm_so, tidak sama dengan -1, menunjukkan offset awal dari kecocokan substring terbesar berikutnya dalam string tertentu. Elemen relatif rm_eo menunjukkan offset akhir pencocokan, yaitu karakter pertama setelah teks yang cocok.

Pelaporan Kesalahan POSIX

Fungsi kesalahan digunakan untuk mengonversi kode kesalahan yang mungkin diterima regcomp() Dan regexec(), di baris pesan kesalahan.

DI DALAM kesalahan ditransmisikan: kode kesalahan kode kesalahan, pola penyangga preg,penunjuk ke buffer string karakter kesalahan dan ukuran buffer baris errbuf_size. Fungsi mengembalikan ukuran kesalahan, yang diperlukan untuk menyimpan pesan kesalahan sebagai string yang diakhiri dengan nol. Jika kesalahan, Dan errbuf_size tidak sama dengan nol kesalahan diisi terlebih dahulu errbuf_size - 1 simbol pesan kesalahan dan diakhiri dengan byte nol (aq\0aq).

Membebaskan buffer template POSIX

Fungsi bebas peraturan() mengosongkan memori yang dialokasikan ke template buffer preg selama proses kompilasi menggunakan regcomp().

NILAI KEMBALI

Fungsi regcomp() mengembalikan nol pada kompilasi yang berhasil atau kode kesalahan sebaliknya.

Fungsi regexec() mengembalikan nol pada pertandingan atau REG_NOMATCH, jika tidak ada kecocokan.

KESALAHAN

Fungsi regcomp() dapat mengembalikan kesalahan berikut: REG_BADBR Penggunaan operator backlink yang salah. REG_BADPAT Penggunaan operator templat yang salah, seperti operator grup atau daftar. REG_BADRPT Penggunaan operator pengulangan yang salah, seperti penggunaan "*" sebagai karakter pertama. REG_EBRACE Tanda kurung tidak berpasangan pada operator interval. REG_EBRACK Tanda kurung siku tidak berpasangan dalam pernyataan daftar. REG_ECOLLATE Elemen pengurutan tidak valid. REG_ECTYPE Nama kelas karakter tidak diketahui. REG_EEND Potensi kesalahan. Tidak didefinisikan dalam POSIX.2. REG_EESCAPE Garis miring terbalik. REG_EPAREN Tanda kurung tidak berpasangan pada operator pengelompokan. REG_ERANGE Penggunaan operator area yang salah: misalnya, ujung area muncul sebelum permulaannya. REG_ESIZE Ekspresi reguler yang dikompilasi memerlukan pola buffer yang lebih besar dari 64 KB. Ini tidak didefinisikan dalam POSIX.2. REG_ESPACE Rutinitas ekspresi reguler kehabisan memori. REG_ESUBREG Referensi balik ke subekspresi tidak valid.

#termasuk
#termasuk
int regcomp(regex_t *preg, karakter konstan *ekspresi reguler, ke dalamcflag);
int regexec(konstan regex_t *preg, karakter konstan *rangkaian, ukuran_ttidak cocok,
pertandingan ulang_tpertandingan, ke dalambendera);
kesalahan ukuran_t(intkode kesalahan, konstanta regex_t *preg, karakter *kesalahan,
ukuran_terrbuf_size);
batalkan regfree(regex_t *preg);

KETERANGAN

Mengompilasi ekspresi reguler POSIX

Fungsi regcomp() digunakan untuk mengkompilasi ekspresi reguler ke dalam format yang sesuai untuk penggunaan pencarian selanjutnya regexec().

regcomp() sebuah penunjuk ke tempat penyimpanan template buffer diteruskan preg, penunjuk ke string yang diakhiri dengan null ekspresi reguler dan bendera cflag, digunakan untuk menentukan jenis kompilasi.

Semua pencarian ekspresi reguler harus dilakukan menggunakan pola buffer yang dikompilasi regexec() harus selalu dipanggil dengan alamat template buffer yang diinisialisasi oleh fungsi tersebut regcomp().

Arti cflag mungkin terdiri dari bitwise atau nol atau lebih dari nilai berikut:

REG_EXTENDED Gunakan sintaks ekspresi reguler yang diperluas POSIX selama interpretasi ekspresi reguler. Jika tanda ini tidak diaktifkan, sintaks ekspresi reguler sederhana POSIX akan digunakan. REG_ICASE Abaikan kasus. Pencarian selanjutnya regexec() menggunakan pola buffer ini tidak akan peka huruf besar-kecil. REG_NOSUB Jangan laporkan posisi pertandingan. Pilihan tidak cocok Dan pertandingan Untuk regexec() diabaikan jika template buffer yang diberikan dikompilasi dengan flag ini diaktifkan. REG_NEWLINE Operator pencocokan dengan karakter apa pun tidak cocok dengan karakter baris baru.

Daftar karakter yang tidak cocok ( [^...] ) tanpa karakter baris baru tidak sama dengan baris baru.

Operator perbandingan berdasarkan awal string ( ^ ) cocok dengan string kosong segera setelah baris baru, apa pun yang terjadi bendera, bendera eksekusi regexec(), berisi REG_NOTBOL.

Operator perbandingan akhir baris ($) mencocokkan string kosong hingga karakter awal baris, apa pun yang terjadi bendera mengandung REG_NOTEOL.

Perbandingan dengan ekspresi reguler POSIX

Fungsi regexec() digunakan untuk membandingkan string yang diakhiri dengan null dengan pola buffer yang telah diproses sebelumnya preg. Argumen tidak cocok Dan pertandingan digunakan untuk memberikan informasi tentang lokasi pertandingan apa pun. Arti bendera bisa bitwise ATAU satu atau kedua nilai REG_NOTBOL Dan REG_NOTEOL. Nilai-nilai ini menentukan perilaku proses perbandingan seperti yang dijelaskan di bawah ini. REG_NOTBOL Operator perbandingan di awal string selalu gagal (tetapi lihat tanda kompilasi yang dijelaskan di atas REG_NEWLINE). Bendera ini dapat digunakan ketika regexec() bagian-bagian terpisah dari sebuah string ditransmisikan, dan awal dari string tersebut dalam hal ini tidak boleh ditafsirkan sebagai awal dari baris baru. REG_NOTEOL Operator perbandingan akhir baris selalu gagal (tetapi lihat tanda kompilasi yang dijelaskan di atas REG_NEWLINE).

Offset byte

Jika REG_NOSUB tidak diatur saat mengkompilasi template buffer, dimungkinkan untuk memperoleh informasi tentang posisi kecocokan. Arti pertandingan harus didefinisikan memiliki setidaknya tidak cocok elemen. Mereka sedang mengisi regexec() alamat kecocokan inline. Offset dari subekspresi yang dimulai dengan Saya- kurung buka, disimpan di pertandingan[i]. Alamat kecocokan dari seluruh ekspresi reguler disimpan pertandingan(perhatikan bahwa untuk mengembalikan offset kecocokan N subekspresi, makna tidak cocok harus tidak kurang T+1). Setiap elemen struktur yang tidak digunakan akan berisi nilai -1.

Struktur pertandingan ulang_t, yang merupakan tipe pertandingan, didefinisikan dalam :

Struktur Typedef ( regoff_t rm_so; regoff_t rm_eo; ) regmatch_t;

Setiap elemen rm_so, tidak sama dengan -1, menunjukkan offset awal dari kecocokan berikutnya dari substring terbesar dalam string tertentu. Elemen relatif rm_eo menunjukkan offset akhir pencocokan, yaitu karakter pertama setelah teks yang cocok.

Pelaporan Kesalahan POSIX

Fungsi kesalahan digunakan untuk mengonversi kode kesalahan yang mungkin diterima regcomp() Dan regexec(), ke dalam baris pesan kesalahan.

DI DALAM kesalahan ditransmisikan: kode kesalahan kode kesalahan, pola penyangga preg, penunjuk ke buffer string karakter kesalahan dan ukuran buffer baris errbuf_size. Fungsi mengembalikan ukuran kesalahan, yang diperlukan untuk menyimpan pesan kesalahan sebagai string yang diakhiri dengan nol. Jika kesalahan, Dan errbuf_size tidak sama dengan nol kesalahan diisi terlebih dahulu errbuf_size - 1 karakter pesan kesalahan dan diakhiri dengan byte nol ("\0").

Membebaskan buffer template POSIX

Fungsi bebas peraturan() mengosongkan memori yang dialokasikan ke template buffer preg selama proses kompilasi menggunakan regcomp().

NILAI KEMBALI

Fungsi regcomp() mengembalikan nol pada kompilasi yang berhasil atau kode kesalahan sebaliknya.

Fungsi regexec() mengembalikan nol pada pertandingan atau REG_NOMATCH, jika tidak ada kecocokan.

KESALAHAN

Fungsi regcomp() dapat mengembalikan kesalahan berikut: REG_BADBR Penggunaan operator backlink yang salah. REG_BADPAT Penggunaan operator templat yang salah, seperti operator grup atau daftar. REG_BADRPT Penggunaan operator pengulangan yang salah, seperti penggunaan "*" sebagai karakter pertama. REG_EBRACE Tanda kurung tidak berpasangan pada operator interval. REG_EBRACK Tanda kurung siku tidak berpasangan dalam pernyataan daftar. REG_ECOLLATE Elemen pengurutan tidak valid. REG_ECTYPE Nama kelas karakter tidak diketahui. REG_EEND Potensi kesalahan. Tidak didefinisikan dalam POSIX.2. REG_EESCAPE Garis miring terbalik. REG_EPAREN Tanda kurung tidak berpasangan pada operator pengelompokan. REG_ERANGE Penggunaan operator area yang salah: misalnya, ujung area muncul sebelum permulaannya. REG_ESIZE Ekspresi reguler yang dikompilasi memerlukan pola buffer yang lebih besar dari 64 KB. Ini tidak didefinisikan dalam POSIX.2. REG_ESPACE Rutinitas ekspresi reguler kehabisan memori. REG_ESUBREG Referensi balik ke subekspresi tidak valid.

Tampilan