정규식
RE(Regulare Expression)은 한국어로 정규식이라고 불리며, POSIX.2 IEEE Std 1003.2에 정의되어 있다.
정규식은 atom
이라는 주 단위를 사용하는데, 이는 다음과 같다.
()
또는 []
표현식, .
(어떠한 한 글자),
^
(글자를 포함하지 않은 줄의 시작점), $
(글자를 포함하지 않은 줄의 끝 지점),
\
를 포함하는 ^.[$()|*+?{\
문자,
0 부터 9 까지의 숫자를 포함하지 않은 {
문자,
혹은 다른 식별자를 포함하지 않는 문자.
문법
atom
뒤에 다음과 같은 식별자를 사용하여 표현할 수 있다.
*
은 0 혹은, 그 이상의 문자와 일치하는것, +
는 1 혹은 그 이상의 문자와 일치, 그리고 ?
는 0 혹은 1 문자와 일치하는지를 나타낸다.
범위
{
로 시작하여 정수형 숫자를 포함하고, 이후 ,
가 사용될 수 있고, 다시 정수형 숫자를 포함할 수 있고, }
로 끝나는 표현을 의미한다.
만약 두 숫자가 사용되었다면 ,
이전의 값은 ,
이후의 값을 넘어갈 수 없다.
,
없이 한 숫자만 사용되었으며 바로 }
문자로 닫힌 표현식은 정확히 그 숫자의 갯수만큼이 일치함을 나타낸다.
,
뒤에 어떠한 숫자가 없이 }
문자로 닫힌 표현식은 ,
이전의 숫자를 i
로 정의하고, ,
이후의 숫자를 j
로 정의할 경우,
i
부터 j
까지의 범위의 어떠한 경우에 일치함을 나타낸다.
Bracket expression
[]
로 둘러싸인 표현식을 의미하며, 일반적으로 []
사이의 나열된 문자열에 일치함을 뜻한다.
만약 첫 글자가 ^
로 시작한다면, []
사이의 나열된 문자열에 불일치함을 뜻한다.
만약, 두 글자 사이에 -
문자가 사용되었다면, 그것은 두 문자 사이의 ASCII 범위를 포함하는것을 뜻하게 된다.
[:
와 :]
로 둘러싸인 표현식은 사이에 character class의 이름을 사용하여 미리 정의된 범위의 문자열을 나타낼 수 있다.
character class의 내용들은 C 에서 사용되는 ctype.h
의 character classification 정의들과 같다.
|
|
|
alnum |
digit |
punct |
alpha |
graph |
space |
blank |
lower |
upper |
cntrl |
print |
xdigit |
[:class:]
또한 [^
로 시작되는 반대되는 개념의 일치에도 사용될 수 있다.
따라서 [^[:class:]]
는 해당 character class에 포함되지 않는 문자열의 집합을 의미하게 된다.
단어의 범위를 나타내는 특별한 [[:<:]]
, [[:>:]]
표현식도 있다.
각각 단어의 시작, 끝부분을 나타내게 된다.
예제는 다음과 같다.
# With out bracket expression
echo 'this is island' | sed 's/is/foo/g'
thfoo foo fooland
# With bracket expression
echo 'this is island' | sed 's/[[:<:]]is[[:>:]]/foo/g'
this foo island
비식별자로서의 특수문자
문자 ]
를 리스트, 즉 []
에서 사용하기 위해선, 가장 처음의 문자로 두거나, 첫 문자 ^
뒤에 바로 두면 된다.
문자 -
를 리스트내에서 사용하려면, ]
와 마찬가지로 가장 처음의 위치에 두거나, 가장 마지막 자리에 두면 된다.
이외에 다른 특수문자를 사용하고 싶다면 백 슬래시 \
를 앞에 함께 사용하여 식별자로서의 기능을 잃게 할 수 있다.
Basic Regulare Expresion
BRE
또는 Obsolete RE
라고도 불리며 현재는 대부분 하위호환성을 유지하기 위해 존재한다.
BRE에서는 +
, |
, ?
가 일반문자로 사용된다.
향상된 정규식
perl이나 python등에서 사용되는 기능이 추가된 정규식을 뜻한다.
\<
: 글자를 포함하지 않는 단어의 시작부분을 뜻한다. [[:<:]]
와 동일하다.
\>
: 글자를 포함하지 않는 단어의 끝부분을 뜻한다. [[:>:]]
와 동일하다.
\b
: \<
와 \>
두가지 모두의 의미를 포함한다.
\B
: \b
와 반대되는 표현이다.
아래와 같은 줄임표현도 있다.
\d
: [[:digit:]]
과 같은 표현이다.
\D
: \d
와 반대되는 표현이다.
\s
: [[:space:]]
와 같은 표현이다.
\S
: \s
와 반대되는 표현이다.
\w
: [[:alnum:]_]
과 같은 표현이다.
\W
: \w
와 반대되는 표현이다.