regex(3) - wariua/manpages-ko GitHub Wiki
regcomp, regexec, regerror, regfree - POSIX μ κ· ννμ ν¨μ
#include <sys/types.h>
#include <regex.h>
int regcomp(regex_t *preg, const char *regex, int cflags);
int regexec(const regex_t *preg, const char *string, size_t nmatch,
regmatch_t pmatch[], int eflags);
size_t regerror(int errcode, const regex_t *preg, char *errbuf,
size_t errbuf_size);
void regfree(regex_t *preg);regcomp()λ₯Ό μ¬μ©ν΄ μ΄μ΄μ§λ regexec() κ²μμ μ ν©ν ννλ‘ μ κ· ννμμ μ»΄νμΌ νλ€.
regcomp()μ μ£Όλ pregλ ν¨ν΄ λ²νΌ μ μ₯ 곡κ°μ λν ν¬μΈν°μ΄κ³ , regexλ λ μ’
λ£ λ¬Έμμ΄μ λν ν¬μΈν°, cflagsλ μ»΄νμΌ λ°©μμ κ²°μ νλ νλκ·Έλ€μ΄λ€.
λͺ¨λ μ κ· ννμ κ²μμ μ»΄νμΌ λ ν¨ν΄ λ²νΌλ₯Ό ν΅ν΄ μ΄λ€μ ΈμΌ νλ€. λ°λΌμ regexec()μλ νμ regcomp()λ‘ μ΄κΈ°ν ν ν¨ν΄ λ²νΌμ μ£Όμλ₯Ό μ€μΌ νλ€.
cflagsμλ λ€μμ 0κ° μ΄μ λΉνΈ OR ν μ μλ€.
REG_EXTENDED-
regexλ₯Ό ν΄μν λ POSIX νμ₯ μ κ· ννμ λ¬Έλ²μ μ΄λ€. μ€μ λΌ μμ§ μμΌλ©΄ POSIX κΈ°λ³Έ μ κ· ννμ λ¬Έλ²μ μ΄λ€. REG_ICASE- λμλ¬Έμλ₯Ό ꡬλ³νμ§ μλλ€. μ΄ ν¨ν΄ λ²νΌλ₯Ό μ°λ νμ
regexec()μμ λμλ¬Έμλ₯Ό 무μνκ² λλ€. REG_NOSUB- μΌμΉ μμΉλ₯Ό μλ € μ£Όμ§ μλλ€. μ΄ νλκ·Έλ₯Ό μ€μ ν΄μ μ»΄νμΌ ν ν¨ν΄ λ²νΌλ₯Ό μ°λ©΄
regexec()μμnmatchλ°pmatchμΈμλ₯Ό 무μνλ€. REG_NEWLINE-
μμ λ¬Έμ μΌμΉ μ°μ°μκ° κ°νμ μΌμΉνμ§ μλλ€.
κ°νμ ν¬ν¨νμ§ μμ λΉμΌμΉ λͺ©λ‘(
[^...])μ΄ κ°νμ μΌμΉνμ§ μλλ€.regexec()μ€ν νλκ·ΈeflagsμREG_NOTBOLμ΄ μλμ§μ 무κ΄νκ² ν μμ μΌμΉ μ°μ°μ(^)κ° κ°ν λ°λ‘ λ€μμ λΉ λ¬Έμμ΄μ μΌμΉνλ€.eflagsμREG_NOTEOLμ΄ μλμ§μ 무κ΄νκ² ν μ’ λ£ μ°μ°μ($)κ° κ°ν λ°λ‘ μ μ λΉ λ¬Έμμ΄μ μΌμΉνλ€.
regexec()λ₯Ό μ¬μ©ν΄ 미리 μ»΄νμΌ ν ν¨ν΄ λ²νΌ pregμ λ μ’
λ£ λ¬Έμμ΄μ λ§μΆ° λ³Έλ€. nmatchμ pmatchλ₯Ό ν΅ν΄ μΌμΉ μμΉλ€μ λν μ 보λ₯Ό μ 곡νλ€. eflagsμλ REG_NOTBOLκ³Ό REG_NOTEOLμ λΉνΈ OR ν μ μλλ° μΌμΉ λ°©μμ΄ μλ μ€λͺ
μ²λΌ λ°λλ€.
REG_NOTBOL- ν μμ μΌμΉ μ°μ°μκ° νμ μΌμΉμ μ€ν¨νλ€. (νμ§λ§ μμ μ»΄νμΌ νλκ·Έ
REG_NEWLINEμ°Έκ³ .) λ¬Έμμ΄μ λΆλΆ λΆλΆμ©regexec()λ‘ μ λ¬νκΈ° λλ¬Έμ λ¬Έμμ΄ μμμ νμ μμμΌλ‘ ν΄μνμ§ λ§μμΌ ν λ μ΄ νλκ·Έλ₯Ό μΈ μ μλ€. REG_NOTEOL- ν μ’
λ£ μΌμΉ μ°μ°μκ° νμ μΌμΉμ μ€ν¨νλ€. (νμ§λ§ μμ μ»΄νμΌ νλκ·Έ
REG_NEWLINEμ°Έκ³ .)
ν¨ν΄ λ²νΌλ₯Ό μ»΄νμΌ ν λ REG_NOSUBλ₯Ό μ€μ ν κ²½μ°κ° μλλ©΄ μΌμΉ μμΉ μ 보λ₯Ό μ»λ κ² κ°λ₯νλ€. pmatchλ μ΅μ nmatch κ° νλͺ©μ΄ λ€μ΄κ°λ ν¬κΈ°μ¬μΌ νλ€. regexec()μμ pmatchμ λΆλΆμ΄ μΌμΉ μμΉλ₯Ό μ±μ΄λ€. i λ²μ§Έ μ΄λ¦° κ΄νΈμμ μμνλ λΆλΆμμ μμΉκ° pmatch[i]μ μ μ₯λλ€. κ·Έλ¦¬κ³ μ 체 μ κ· ννμμ μΌμΉ μμΉκ° pmatch[0]μ μ μ₯λλ€. (νμμ μΌμΉ μμΉ N κ°λ₯Ό λ°μΌλ €λ©΄ nmatchκ° μ΅μ N+1μ΄μ΄μΌ νλ€.) μ μ°μΈ ꡬ쑰체 νλͺ©μλ -1 κ°μ΄ λ΄κΈ°κ² λλ€.
pmatchμ νμ
μΈ regmatch_t ꡬ쑰체λ <regex.h>μ μ μλΌ μλ€.
typedef struct {
regoff_t rm_so;
regoff_t rm_eo;
} regmatch_t;-1 μλ rm_so νλͺ©μ λ¬Έμμ΄ λ΄μμ κ°μ₯ ν° λ€μ μΌμΉ λΆλΆμ΄μ μμ μμΉλ₯Ό λνλΈλ€. rm_eo νλͺ©μ μΌμΉ λΆλΆ λμ μλμ μΌλ‘ λνλ΄λλ°, μΌμΉ ν
μ€νΈ λ€μ 첫 λ¬Έμμ μμΉμ΄λ€.
regerror()λ₯Ό μ΄μ©ν΄ regcomp() λ° regexec()κ° λ°ννλ μ€λ₯ μ½λλ₯Ό μ€λ₯ λ©μμ§ λ¬Έμμ΄λ‘ λ°κΎΌλ€.
μ€λ₯ μ½λ errcode, ν¨ν΄ λ²νΌ preg, λ¬Έμμ΄ λ²νΌμ λν ν¬μΈν° errbuf, κ·Έ λ¬Έμμ΄ λ²νΌμ ν¬κΈ° errbuf_sizeλ₯Ό regerror()μ μ€λ€. κ·Έλ¬λ©΄ λ μ’
λ£ μ€λ₯ λ©μμ§ λ¬Έμμ΄μ λ΄λ λ° νμν errbufμ ν¬κΈ°λ₯Ό λ°ννλ€. errbufμ errbuf_size λͺ¨λ 0μ΄ μλλ©΄ errbufμ μ€λ₯ λ©μμ§μ μ²μ errbuf_size - 1 κ° λ¬Έμμ μ’
λ£ λ λ°μ΄νΈ('\0')λ₯Ό μ±μ΄λ€.
μ»΄νμΌ λ ν¨ν΄ λ²νΌ pregλ₯Ό regfree()μ μ£Όλ©΄ regcomp()μμ μ»΄νμΌ νλ©° ν¨ν΄ λ²νΌμ ν λΉν λ©λͺ¨λ¦¬λ₯Ό ν΄μ νλ€.
regcomp()λ μ»΄νμΌ μ±κ³΅ μ 0μ λ°ννλ©° μ€ν¨ μ μ€λ₯ μ½λλ₯Ό λ°ννλ€.
regexec()λ μΌμΉ μ±κ³΅ μ 0μ λ°ννλ©° μ€ν¨ μ REG_NOMATCHλ₯Ό λ°ννλ€.
regcomp()κ° λ€μ μ€λ₯λ₯Ό λ°νν μ μλ€.
REG_BADBR- μμ°Έμ‘° μ°μ°μ μ¬μ© μ€λ₯.
REG_BADPAT- κ·Έλ£Ήμ΄λ λͺ©λ‘ κ°μ ν¨ν΄ μ°μ°μ μ¬μ© μ€λ₯.
REG_BADRPT- '*'λ₯Ό 첫 λ¬Έμλ‘ μ°λ κ² κ°μ λ°λ³΅ μ°μ°μ μ¬μ© μ€λ₯.
REG_EBRACE- μ€κ΄νΈ κ΅¬κ° μ°μ°μ μ§ μ λ§μ.
REG_EBRACK- λκ΄νΈ λͺ©λ‘ μ°μ°μ μ§ μ λ§μ.
REG_ECOLLATE- μ‘°ν© μμ μ€λ₯.
REG_ECTYPE- λ¬Έμ ν΄λμ€ μ΄λ¦ μλͺ»λ¨.
REG_EEND- λΆνΉμ μ€λ₯. POSIX.2μλ κ·μ λΌ μμ§ μμ.
REG_EESCAPE- λμ λ°±μ¬λμ.
REG_EPAREN- κ΄νΈ κ·Έλ£Ή μ°μ°μ μ§ μ λ§μ.
REG_ERANGE- λ²μ μ°μ°μ μ¬μ© μ€λ₯. μλ₯Ό λ€μ΄ λ²μ λμ μ΄ μμμ μμ λμ΄.
REG_ESIZE- μ»΄νμΌ λ μ κ· ννμμ 64 kB λλ ν¨ν΄ λ²νΌκ° νμν¨. POSIX.2μλ κ·μ λΌ μμ§ μμ.
REG_ESPACE- regex λ£¨ν΄ μ€ν μ€ λ©λͺ¨λ¦¬ λΆμ‘±.
REG_ESUBREG- μλͺ»λ νμμ μμ°Έμ‘°.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
| μΈν°νμ΄μ€ | μμ± | κ° |
|---|---|---|
regcomp(), regexec()
|
μ€λ λ μμ μ± | MT-Safe locale |
regerror() |
μ€λ λ μμ μ± | MT-Safe env |
regfree() |
μ€λ λ μμ μ± | MT-Safe |
POSIX.1-2001, POSIX.1-2008.
grep(1), regex(7)
glibc λ§€λ΄μΌ Regular Expressions μ
2019-03-06