regex(7) - wariua/manpages-ko GitHub Wiki
regex - POSIX.2 μ κ· ννμ
POSIX.2μ κ·μ λΌ μλ μ κ· ννμ(regular expression, "RE")μλ λ κ°μ§ ννκ° μλ€. μ μ RE(λλ΅ egrep
μ RE. POSIX.2μμλ "νμ₯" REλΌκ³ ν¨)μ ꡬμ RE(λλ΅ ed(1)
μ RE. POSIX.2μμλ "κΈ°λ³Έ" REλΌκ³ ν¨)μ΄λ€. ꡬμ REλ μ£Όλ‘ λͺλͺ μ€λλ νλ‘κ·Έλ¨μ νμ νΈνμ±μ μν΄ λ¨μ μλλ° λ§μ§λ§μμ λ
Όμνλ€. POSIX.2μμλ RE λ¬Έλ²κ³Ό μλ―Έλ‘ μΌλΆλ₯Ό λ―Έμ μΌλ‘ λ¨κ²¨λκ³ μλ€. "(!)"λ κ·Έλ° λΆλΆλ€μ μ΄λ»κ² ꡬννκΈ°λ‘ νλμ§ λνλ΄λ©° λ€λ₯Έ POSIX.2 ꡬνκ³Ό μμ ν νΈνλμ§λ μμ μλ μλ€.
(μ μ) RE μμ '|'λ‘ κ΅¬λΆλ 1κ°(!) μ΄μμ λΉμ΄ μμ§ μμ(!) λΈλμΉλ€. κ·Έ μ€ μ΄λ λΈλμΉμλΌλ μΌμΉνλ©΄ μμ μΌμΉνλ κ²μ΄λ€.
λΈλμΉ(branch)λ 1κ°(!) μ΄μμ μ‘°κ°μ μ΄μ΄ λΆμΈ κ²μ΄λ€. 첫 λ²μ§Έ μ‘°κ°κ³Ό μΌμΉνκ³ μ΄μ΄μ μ°¨λ‘λ‘ μΌμΉνλ©΄ λΈλμΉμ μΌμΉνλ κ²μ΄λ€.
μ‘°κ°(piece)μ΄λ μμλ§ μκ±°λ κ·Έ λ€μ '*'λ '+', '?', νκ³κ° 1κ°(!) λΆμ κ²μ΄λ€. μμ λ€μ '*'κ° μμΌλ©΄ κ·Έ μμμ 0λ² μ΄μ μΌμΉνλ μ΄μ μΌμΉνλ€. μμ λ€μ '+'κ° μμΌλ©΄ κ·Έ μμμ 1λ² μ΄μ μΌμΉνλ μ΄μ μΌμΉνλ€. μμ λ€μ '?'κ° μμΌλ©΄ κ·Έ μμμ 0λ² λλ 1λ² μΌμΉνλ μ΄μ μΌμΉνλ€.
νκ³(bound)λ '{'μ μ΄μ΄μ λΆνΈ μλ 10μ§μ μ μκ° μ€κ³ , μ νμ μΌλ‘ ','κ° μ€κ³ , μ νμ μΌλ‘ λ λ€λ₯Έ λΆνΈ μλ 10μ§μ μ μκ° μ€κ³ , νμ λ§μ§λ§μ '}'κ° λΆμ κ²μ΄λ€. μ μλ 0μμ RE_DUP_MAX
(255(!))κΉμ§ λ΄μ μμ΄μΌ νλ©° λ κ°μΌ λλ 첫 λ²μ§Έκ° λ λ²μ§Έλ³΄λ€ ν¬μ§ μμμΌ νλ€. μμ λ€μ μ μ iκ° μκ³ μΌνλ μλ νκ³κ° μμΌλ©΄ μμμ μ νν i λ² μΌμΉνλ μ΄μ μΌμΉνλ€. μμ λ€μ μ μ iμ μΌνκ° μλ νκ³κ° μμΌλ©΄ μμμ i λ² μ΄μ μΌμΉνλ μ΄μ μΌμΉνλ€. μμ λ€μ μ μ iμ jκ° μλ νκ³κ° μμΌλ©΄ μμμ i λ²μμ j λ²κΉμ§ μ¬μ΄λ‘ μΌμΉνλ μ΄μ μΌμΉνλ€.
μμ(atom)λ "()
"λ‘ κ°μΌ μ κ· ννμμ΄κ±°λ (κ·Έ μ κ· ννμμ μΌμΉ), λΉ "()
" μ΄κ±°λ (λ λ¬Έμμ΄μ μΌμΉ)(!), λκ΄νΈ μμ΄κ±°λ (μλ μ°Έκ³ ), '.'μ΄κ±°λ (μ무 λ¬Έμ ν κ°μ μΌμΉ), '^'μ΄κ±°λ (ν μμμ λ λ¬Έμμ΄μ μΌμΉ), '$'μ΄κ±°λ (ν λμ λ λ¬Έμμ΄μ μΌμΉ), '\' λ€μ "^.[$()|*+?{\
" μ€ νλκ° μ€λ κ²μ΄κ±°λ (κ·Έ λ¬Έμ κ·Έλλ‘μ μΌμΉ), '\' λ€μμ λ€λ₯Έ λ¬Έμ(!)κ° μ€λ κ²μ΄κ±°λ ('\'κ° μλ κ²μ²λΌ κ·Έ λ¬Έμ κ·Έλλ‘μ μΌμΉ(!)), λ€λ₯Έ νΉμ μλ―Έ μλ λ¬Έμ νλμ΄λ€ (κ·Έ λ¬Έμμ μΌμΉ). '{' λ€μ μ€λ κ² μ«μκ° μλλ©΄ νκ³ μμμ΄ μλλΌ λ³΄ν΅ λ¬Έμλ€(!). RE μμ '\'λ‘ λλ§μΉλ 건 μ λ²νμ§ μλ€.
λκ΄νΈ μ(bracket expression)μ΄λ "[]
"λ‘ κ°μΌ λ¬Έμ λͺ©λ‘μ΄λ€. 보ν΅μ κ·Έ λͺ©λ‘μ μ무 λ¬Έμ νλμ μΌμΉνλ€ (λ¨ μλ μ°Έκ³ ). λͺ©λ‘μ΄ '^'λ‘ μμνλ©΄ κ·Έ λͺ©λ‘ λλ¨Έμ§μ μλ μ무 λ¬Έμ νλμ μΌμΉνλ€ (λ¨ μλ μ°Έκ³ ). λͺ©λ‘ λ΄μ λ λ¬Έμκ° '-'λ‘ μ°κ²°λΌ μλ 건 μ‘°ν©μ΄(collating sequence)μμ κ·Έ λ μ¬μ΄ λ¬Έμλ€ λͺ¨λ(κ·Έ λ λ¬Έμλ ν¬ν¨)μ ν΄λΉνλ λ²μ(range)λ₯Ό λνλΈλ€. μλ₯Ό λ€μ΄ ASCIIμμ "[0-9]
"λ 10μ§μ μ«μμ μΌμΉνλ€. "a-c-e
"μ²λΌ λ λ²μμ κ²ΉμΉλ λμ μ νλλ‘ μ°λ 건 μ λ²νμ§ μλ€(!). λ²μλ μ‘°ν©μ΄μ λ§€μ° μμ‘΄μ μ΄λ©° λ°λΌμ μ΄μ κ°λ₯ν νλ‘κ·Έλ¨μμλ μ¬μ©μ νΌνλ κ² μ’λ€.
λͺ©λ‘μ ']' μ체λ₯Ό ν¬ν¨μν€λ €λ©΄ 첫 λ²μ§Έ λ¬Έμμ΄λλ‘ (κ·Έ μμ '^' κ°λ₯) νλ©΄ λλ€. '-' μ체λ₯Ό ν¬ν¨μν€λ €λ©΄ 첫 λ²μ§Έλ λ§μ§λ§ λ¬Έμμ΄λλ‘ νλ©΄ λλ©°, μλλ©΄ λ²μμ λ€μͺ½ λμ μ΄μ΄λ λλ€. '-' μ체λ₯Ό λ²μμ μμͺ½ λμ μΌλ‘ μ°λ €λ©΄ "[.
" λ° ".]
"λ‘ κ°μΈμ μ‘°ν© νλͺ©(collating element)μΌλ‘ λ§λ€μ΄ μ£Όλ©΄ λλ€ (μλ μ°Έκ³ ). μ΄ κ²½μ°λ€κ³Ό '['λ₯Ό μ°λ λͺ κ°μ§ μ‘°ν©λ€(λ€μ λ¬Έλ¨ μ°Έκ³ )μ μ μΈνλ©΄ λκ΄νΈ λ΄μμ '\'λ₯Ό ν¬ν¨ν μ¬ν λͺ¨λ νΉμ λ¬Έμλ€μ νΉμ μλ―Έκ° μμ΄μ§λ€.
λκ΄νΈ μ λ΄μμ μ‘°ν© νλͺ©(λ¬Έμ, ν λ¬ΈμμΈ κ²μ²λΌ μ‘°ν©λλ λ€λ¬Έμ μ΄, λλ μμ λ μ€ νλλ₯Ό κ°λ¦¬ν€λ μ‘°ν©μ΄ μ΄λ¦)μ "[.
" λ° ".]
"λ‘ κ°μΌ κ²μ κ·Έ μ‘°ν© νλͺ©μ λ¬Έμ μ΄μ λνλΈλ€. κ·Έ μ΄μ λκ΄νΈ μ λͺ©λ‘μμ λ¨μΌ νλͺ©μ΄λ€. λ°λΌμ λ€λ¬Έμ μ‘°ν© νλͺ©μ λ΄μ λκ΄νΈ μμ΄ μ¬λ¬ λ¬Έμμ μΌμΉν μ μλ€. μλ₯Ό λ€μ΄ μ‘°ν© μ΄μ "ch"λΌλ μ‘°ν© νλͺ©μ΄ ν¬ν¨λΌ μλ€λ©΄ RE "[[.ch.]]*c
"κ° "chchcc"μ μ²μ λ€μ― λ¬Έμμ μΌμΉνλ€.
λκ΄νΈ μ λ΄μμ "[=
" λ° "=]
"λ‘ κ°μΌ μ‘°ν© νλͺ©μ λμΉλ₯(equivalence class)λ‘μ κ·Έ νλͺ©κ³Ό λλ±ν λͺ¨λ μ‘°ν© νλͺ©λ€(κ·Έ νλͺ© μ체λ ν¬ν¨)μ λ¬Έμ μ΄λ€μ λνλΈλ€. (λλ±ν λ€λ₯Έ μ‘°ν© νλͺ©μ΄ μμΌλ©΄ "[.
" λ° ".]
"λ‘ κ°μΌ κ²μ²λΌ μ·¨κΈνλ€.) μλ₯Ό λ€μ΄ oμ ^κ° κ°μ λμΉλ₯μ μνλ€λ©΄ "[[=o=]]
", "[[=^=]]
", "[o^]
"κ° λͺ¨λ κ°μ κ±Έ λ»νλ€. λμΉλ₯λ λ²μμ λμ μ΄ λ μ μλ€(!).
λκ΄νΈ μ λ΄μμ "[:
" λ° ":]
"λ‘ κ°μΌ λ¬Έμ μ ν(character class) μ΄λ¦μ κ·Έ μ νμ μν λͺ¨λ λ¬Έμλ€μ λͺ©λ‘μ λνλΈλ€. νμ€ λ¬Έμ μ ν μ΄λ¦μ λ€μκ³Ό κ°λ€.
alnum digit punct
alpha graph space
black lower upper
cntrl print xdigit
μ΄λ wctype(3)
μ μ μλΌ μλ λ¬Έμ μ νλ€μ΄λ€. λ‘μΊμμ λ€λ₯Έ μ νλ€λ μ 곡ν μ μλ€. λ¬Έμ μ νμ λ²μμ λμ μΌλ‘ μΈ μ μλ€.
ν RE μμ΄ μ΄λ€ λ¬Έμμ΄μ μ¬λ¬ λΆλΆμ΄μ μΌμΉν μ μλ κ²½μ°μλ λ¬Έμμ΄μμ κ°μ₯ μΌμ° μμνλ λΆλΆμ΄μ μΌμΉνκ² λλ€. κ·Έ μ§μ μμ μμνλ μ¬λ¬ λΆλΆμ΄μ μΌμΉν μ μμΌλ©΄ κ°μ₯ κΈ΄ κ²μ μΌμΉνκ² λλ€. νμμ μμλ κ°μ₯ κΈ΄ λΆλΆμ΄μ μΌμΉνλ μ 체 μΌμΉ κΈΈμ΄κ° κ°λ₯ν ν κΈΈμ΄μΌ νλ€λ μ μ½ λ΄μμμ΄λ©°, RE λ΄μμ μΌμ° μμνλ νμμμ΄ μ΄ν νμμλ³΄λ€ λμ μ°μ μμλ₯Ό κ°μ§λ€. λ μμμ νμμμ΄ κ·Έ λΆλΆμ μ΄λ£¨λ νμμλ³΄λ€ λμ μ°μ μμλ₯Ό κ°μ§λ€λ μ μ μ μνλΌ.
μΌμΉ κΈΈμ΄λ μ‘°ν© νλͺ©μ΄ μλλΌ λ¬Έμ λ¨μλ‘ μΌλ€. λ λ¬Έμμ΄μ μΌμΉνμ§ μλ κ²λ³΄λ€λ κΈ΄ κ²μΌλ‘ λ³Έλ€. μλ₯Ό λ€μ΄ "bb*
"λ "abbbc"μ κ°μ΄λ° μΈ λ¬Έμμ μΌμΉνκ³ , "(wee|week)(knights|nights)
"λ "weeknights"μ 10κ° λ¬Έμ λͺ¨λμ μΌμΉνλ©°, "(.*).*
"λ₯Ό "abc"μ λ§μΆ° λ³Ό λ κ΄νΈ μΉ νμμμ΄ μΈ λ¬Έμ λͺ¨λμ μΌμΉνκ³ , "(a*)*
"λ₯Ό "bc"μ λ§μΆ° λ³Ό λ RE μ μ 체μ κ΄νΈ μΉ νμμ λͺ¨λκ° λ λ¬Έμμ΄μ μΌμΉνλ€.
λμλ¬Έμ κ΅¬λ³ μλ κ²μ¬λ₯Ό μ§μ ν κ²½μ° κ·Έ ν¨κ³Όλ μνλ²³μμ λμλ¬Έμ ꡬλΆμ΄ λͺ¨λ μ¬λΌμ§ κ²κ³Ό κ°λ€. ꡬλ³μ΄ μλ μνλ²³μ΄ λκ΄νΈ μ λ°μ λ³΄ν΅ λ¬Έμλ‘ λ±μ₯ν λλ λ κ²½μ° λͺ¨λλ₯Ό λ΄μ λκ΄νΈ μμΌλ‘ λ³νλλ ν¨κ³Όκ° λλ€. μλ₯Ό λ€μ΄ 'x'λ "[xX]
"κ° λλ€. λκ΄νΈ μ μμ λ±μ₯ν λμλ λμ λ¬Έμκ° κ·Έ λκ΄νΈ μμ μΆκ°λλ€. κ·Έλμ μλ₯Ό λ€μ΄ "[x]
"λ "[xX]
"κ° λκ³ "[^x]
"λ "[^xX]
"κ° λλ€.
RE μ κΈΈμ΄μλ νΉλ³ν μ νμ΄ μλ€(!). μ΄μμ±μ΄ μμ΄μΌ νλ νλ‘κ·Έλ¨μμλ 256 λ°μ΄νΈλ₯Ό λλ REλ₯Ό μ¬μ©νμ§ μλ κ² μ’λ€. ꡬν체μμ κ·Έλ° REλ₯Ό λ°μλ€μ΄μ§ μμλ POSIX μ€μμΌ μ μλ€.
ꡬμ ("κΈ°λ³Έ") μ κ· ννμμ μ¬λ¬ μΈ‘λ©΄μμ λ€λ₯΄λ€. '|', '+', '?'κ° λ³΄ν΅ λ¬Έμμ΄κ³ κ·Έ κΈ°λ₯μ λμνλ κ² μλ€. νκ³μ ꡬλΆμκ° "\{
" λ° "\}
"μ΄λ©° '{'μ '}'λ λ³΄ν΅ λ¬Έμμ΄λ€. νμμμ κ΄νΈκ° "\(
" λ° "\)
"μ΄λ©° '('μ ')'λ λ³΄ν΅ λ¬Έμμ΄λ€. '^'κ° RE μμμ΄λ κ΄νΈ μΉ νμμμ μμ(!)μμλ₯Ό μ μΈνλ©΄ λ³΄ν΅ λ¬Έμμ΄κ³ , '$'κ° RE λμ΄λ κ΄νΈ μΉ νμμ λ(!)μμλ₯Ό μ μΈνλ©΄ λ³΄ν΅ λ¬Έμμ΄λ©°, '*'κ° RE μμμ΄λ κ΄νΈ μΉ νμμμ μμ(!)μ (λλ '^' λ€μ) λ±μ₯νλ κ²½μ° λ³΄ν΅ λ¬Έμμ΄λ€.
λμΌλ‘ μμ°Έμ‘°(back reference)λΌλ μλ‘μ΄ μ’
λ₯μ μμκ° μλ€. '\' λ€μ 0 μλ 10μ§μ μ«μ d
κ° μ€λ©΄ d
λ²μ§Έ κ΄νΈ μΉ νμμ(μ¬λ κ΄νΈ μμΉμ λ°λΌ μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ λ²νΈ λ§€κΉ)μ μΌμΉν λ¬Έμ μ΄κ³Ό κ°μ μ΄μ μΌμΉνλ€. κ·Έλμ μλ₯Ό λ€μ΄ "\([bc]\)\1
"μ΄ "bb"λ "cc"μλ μΌμΉνμ§λ§ "bc"μλ μΌμΉνμ§ μλλ€.
REκ° λ μ’ λ₯κ° μλ μ μ΄ κ΅¬λ¦¬λ€.
νν POSIX.2 λͺ μΈμμλ μ§ μλ '('κ° μμ λ ')'κ° λ³΄ν΅ λ¬ΈμλΌκ³ νκ³ μλ€. μ΄λ μλμΉ μμ 문ꡬ μ€μμ κ²°κ³ΌμμΌλ©° μλ§ λ°λκ² λ κ²μ΄λ€. κ·Έ λ΄μ©μ μμ§νλ κ±Έ νΌν΄μΌ νλ€.
μμ°Έμ‘°λ λμ°νκ² κ΅¬λ¦¬λ©° ν¨μ¨μ μΈ κ΅¬νμ λ§λλ λ° μ¬κ°ν λ¬Έμ λ₯Ό μΌκΈ°νλ€. κ²λ€κ° μ’ μ λ§€νκ² μ μλΌ μλ€. ("a\(\(b\)*\2\)*d
"λ "abbbd"μ μΌμΉν κΉ?) μ¬μ©μ νΌν΄μΌ νλ€.
λμλ¬Έμ κ΅¬λ³ μλ κ²μ¬μ λν POSIX.2μ λͺ μΈκ° μ λ§€νλ€. μμ λμ¨ "νμͺ½μ΄ λͺ¨λ κ²½μ°λ₯Ό λνλ"μ΄λΌλ μ μλ ꡬνμλ€μ΄ νμ¬ μ¬λ°λ₯Έ ν΄μμ΄λΌκ³ ν©μνλ λ°©μμ΄λ€.
μ΄ νμ΄μ§λ Henry Spencerμ regex ν¨ν€μ§μμ κ°μ Έμ¨ κ²μ΄λ€.
grep(1)
, regex(3)
POSIX.2 2.8μ (Regular Expression Notation)
2009-01-12