정규식에 관한건 Visual Basic 캬테고리에도 하나 있음을 참고 하세요 정규식은 모든 언어에서.. 개발되고 있으며 리눅스에서도 활용할 수 있으므로 꼭 알아두도록 합시다 ◐ 정규 표현식의 규칙 문자열 패턴을 표한하기 위해 정규 표현식과 함께 사용되는 특수문자들이 있다. 정규 표현식에 사용되는 이 특수문자들의 사용법을 먼저 알아보도록 하자. ☞ 패턴 표현에 사용되는 특수문자 1. '.' 특수 문자 '.'은 어떤 문자이건 간에 임의의 한 글자를 나타낸다. 예를 들면, 패턴 a.c는 어느 한문자의 앞 문자가 a이고 뒷 문자는 c인 모든 문자열을 포함한다. 따라서 aac나 abc, acc는 이 패턴에 일치되는 문자열이다. 그러나 '.'은 반드시 임의의 한 글자만을 대신하기 때문에 a로 시작해 c로 끝나는 문자열 중 두 글자뿐인 ac나 abbc등은 이 패턴에 포함되지 않는다. 사용예 | 내 용 | 해당 문자열 | s.e | s와 e사이에 임의의 한 글자를 갖는 문자열과 일치한다. | sae, sbe, sce, sde… | .ce | ce앞에 임의의 한 글자를 갖는 문자열과 일치한다. | ace, kce, ffce… |
2. '*' 특수 문자 '*'는 바로 앞의 문자를 의미하며 그 문자가 없거나 하나 이상임을 나타낸다. 위의 '.'이 그 자체로 임의의 한 글자만을 의미하는데 반해 '*'는 바로 복수개의 문자를 나타낼 수 있다. 대신 '*' 앞에는 반드시 문자가 하나 이상 있어야 한다. 만일 "*e"와 같이 '*' 앞에 문자가 없으면 잘못된 패턴으로 인식해 에러가 발생한다.
사용예 | 내 용 | 해당 문자열 | s*e | e앞에 s가 없거나 하나 이상 존재하는 모든 문자열을 나타낸다. | e, se, sse, ssee… | abc* | ac다음에 c가 없거나 하나 이상 존재하는 모든 문자열을 나타낸다. | ab, abc, abcc, abccc… | h*im | im앞에 h가 없거나 하나 이상 존재하는 모든 문자열을 나타낸다. | im, him, hhim, hhhim… |
6. '$' 특수 문자 사용예 | 내 용 | 해당 문자열 | a?bc$ | bc로 끝나는 문자열 앞에 문자 a가 없거나 하나 존재하는 문자열과 일치한다. | eeabc, seebc, bc… | t.e$ | t와 임의의 한 글자, 그리고 그 다음에 e로 연결되어 끝나는 문자열과 일치한다. | onthetoe, bctae, appetitle… | s?e+$ | 첫 글자는 s나 e로 시작하고 하나 이상의 e로 끝나는 문자열과 일치한다. | e, se, ee, eee, see, seee… | ^the$ | the로 시작해서 the로 끝나는 문자열과 일치한다. 즉, 이 경우는 문자열 자체가 the뿐인 경우에만 일치한다. | the… |
7. '[]' 특수 문자 각 괄호 []는 []안에 있는 문자열중에서 하나의 문자만을 의미한다. []안에서 범위를 지정할 때에는 '-' 문자를 사용한다. 즉, [a-d]는 [abcd]와 동일하며 [0-9]는 [0123456789]와 같은 의미이다.
사용예 | 내 용 | 해당 문자열 | [ab]cd | acd또는 bcd를 포함하는 문자열과 일치한다. | acd, tacde, "bcd", "tbcde"… | ^[ab]cd | acd또는 bcd로 시작하는 문자열과 일치한다. | acds, bcdt, acdsee32… | [a-z] | 영문 소문자나 대문자 한 글자를 포함하는 문자열과 일치한다. | a02c2ds, ta123code, Student… | [a-z][A-Z] | 영문 소문자나 대문자 한 글자를 포함하는 문자열과 일치한다. | LINUX, 386AT… | [0-9] | 십진수 한자를 포함하는 문자열과 일치한다. | a02cds, ta123cde, 386… | ga[a-z] | 하나의 영문 소문자 앞에 ga를 갖는 문자열과 일치한다. | LINgazUX, gazzett… | ^ab[cd]ef | abcef또는 abdef로 시작하는 문자열과 일치한다. | abcef0z, abdef386… | ^[a-zA-Z] | 영문소문자 한자 이상을 갖는 문자열과 일치한다. | LINgazUX, abcdef0z… | [a-z]+ | ab, aB, Ab, AB를 포함하는 문자열과 일치한다. | tgabcabcef, MySQL… | [aB][bB] | ab, aB, Ab, AB를 포함하는 문자열과 일치한다. | 386ABIT, abcef0z, tgabcabcef… | ,[a-zA-Z0-9]$ | 콤마와 하나의 영문자 또는 숫자로 끝나는 문자열과 일치한다. | abdef38,6, 199,2… |
만일 원하지 않는 문자를 제외한 나머지 문자를 가리킬 때에는 []안의 첫 문자로 '^'를 사용한다.
사용예 | 내 용 | 해당 문자열 | [^ab]cd | acd와 bcd를 제외하고는 패턴 .cd와 같다. 즉 cd앞에 a나 b를 제외한 하나의 문자를 포함하는 문자열과 일치한다. | ccd, scd, 018cd, tgcdcdabcef, gazcd18… | s[^ab]t | sat와 sbt를 제외하고는 패턴 s.t와 같다. 즉 t앞에 a나 b를 제외한 임의의 한문자와 그앞에 s가 있는 문자열과 일치한다. | sct, sdt, tgcdsctda28 settle… | [^a-z] | 영문 소문자를 제외한 한글자를 포함한 문자열과 일치한다. | MySQL, 386sAB, IT, abcef0z, 199,2… | [^a-zA-Z] | 영문자를 제외한 한글자를 포함하는 문자열과 일치한다. | 386sAB,IT, gazscd18, abcef0z, 199,2… | [^0-9] | 숫자를 제외한 한글자를 포함하는 문자열과 일치한다. | settle, gazscd18, LINUX… |
8. '{}' 특수 문자 사용예 | 내 용 | 해당 문자열 | a{2}b | aab를 가진 문자열과 일치한다. 즉 {2}는 {}앞에 있는 문자 a의 개수가 2개임을 의미한다. | aab | a{2,}b | a의 개수가 최소한 2개 이상인 문자열을 포함하는 문자열과 일치한다. | aab, aaab, aaaab… | a{1,3}b | b앞에 1개부터 3개까지의 a를 갖는 문자열을 포함하는 문자열을 문자열과 일치한다. | ab, aab, aaaab… |
결국 앞에서 사용한 패턴 '*'는 중괄호로 표현하면 {0,}과 같은 의미이고 '+'는 {1,}과 '?'는 {0,1}과 각각 같은 의미임을 알 수 있다.
10. '|' 특수 문자 사용예 | 내 용 | 해당 문자열 | he|she | he나 she를 포함하는 문자열과 일치한다. | he is hansome, she's gone… | (he|she)is | is앞에 he나 she를 포함하는 문자열, 즉 heis나 sheis를 포함하는 모든 문자열과 일치한다. | | (le|li)*ft | ft앞에 le나 li가 없거나 하나 이상인 문자열과 일치한다. | mlefto, lft, lelift, fclelelilefte… | mo(no)+ | mo뒤에 no가 하나 이상인 문자열과 일치한다. | mono, monono, mononono, acmonoe… |
☞ 문자 클래스 (character class) 패턴을 [a-z]나 [A-Z], [0-9]로 표현하는 대신 다음과 같이 문자 클래스 (character class)로간단하게 표현할 수도 있다.
- [[:alnum:]] : 알파벳 문자나 숫자중 하나를 의미하며 [a-zA-Z0-9]와 동일한 표현이다. - [[:alpha:]] : 알파벳 문자중 하나를 의미하며 [a-zA-Z], 또는 [a-Z]와 동일한 표현이다. - [[:graph:]] : 공백 문자를 제외한 화면에 출력 가능한 문자 - [[:space:]] : white space 문자 (예 : 공백문자, 탭('\t'), newline('\n'), carriage) return('r') 등의 문자 - [[:blank:]] : 공백 문자 또는 탭 - [[:lower:]] : 소문자를 의미하며 [a-z]와 동일한 표현이다. - [[:upper:]] : 대문자를 의미하며 [A-Z]와 동일한 표현이다. - [[:cntrl:]] : 컨트롤 문자 - [[:digit:]] : 숫자 한자를 의미하며 [0-9]와 동일한 표현이다. - [[:xdigit:]] : 16진수에 쓰이는 문자를 의미하며 [0-9|A|B|C|D|E|F]와 동일한 표현이다.
☞ 정규 표현식에서 특수문자의 표현 지금까지 정규 표현식에서 사용한 여러 특수 문자를 특수 문자가 아닌 그 문자 자체의 의미로 사용하려면 특수문자 앞에 역슬래쉬 ('\') 문자를 붙여 escape시켜야 한다. 정규 표현식에서 escape시켜야 하는 특수 문자로는 다음과 같은 것들이 있다.
^ . [ ] $ ( ) | * + ? { } \ |
1. \*+
문자 '*'이 하나 이상 포함된 모든 문자열과 일치한다. 이것은 정규 표현식에서 사용하는 특수문자 '*'를 '\*'와 같이 escape시킴으로써 문자열에서 '*'가 포함된 문자열을 찾는다.
예) *notice, dictsh*eionary
2. \[RE:[1-9][0-9*\] "["와 "RE:", 그리고 0을 제외한 하나의 숫자와 0또는 하나 이상의 0을 포함한 숫자, 그리고 "]"를 순서대로 포함하는 모든 문자열과 일치한다. 즉, 이는 게시판에 답장 글을 올릴 때의 "[RE:12]와 같은 패턴을 의미한다.
예) [RE:9], [RE:12]*eionary
3. [*\/+?{}.] "*"나 "\", "/", "+", "?", "{", "}", "." 중 하는 포함하는 모든 문자열과 일치한다. 특수문자 []안에서는 위의 경우와 달리 예외가 적용된다. 즉 []안에서는 특수문자를 특수문자 자체로 표현하기 위해 해당 문자를 별도로 escape시키지 않아도 된다.
예) [RE:21]*eionary, turboc++, ce{le}brity, hello?, ac/monoe
|