컴퓨터 공부/JAVA

[JAVA] 정규식을 배워보자 (1)

나정_ 2013. 3. 29. 16:14

정규식에 대해서 알아보자 


정규식으로 큰범위로 보자면 정적정규식과 동적정규식으로 나뉠 수 있다. 

실제로 정적 정규식 같은 경우 입력한 문자와 일치하는 글자를 찾아내는 방식이기 때문에 어렵지 않으나, 동적 정규식같은 경우 정규표현식을 익혀야 능수능란하게 사용할 수 있다. 


또한 정규식을 앎으로써, 컴퓨터 시스템에 존재하는 파일 목록에서 보고싶은 파일들만 걸러내거나, 소스코드를 수정하다가 특정문자를 다른문자로 대체하고 싶을 때, 파일 특정위치에서 원하는 텍스트를 찾고 싶을 때 등등 컴퓨터 수행시 발생되는 상황에서 이러한 상황을 해결할 수 있기 때문에 배워두는 편이 좋다. 


정규식 예제를 통해 정규식표현식을 설명하도록 하겠다.


1. 정규식 표현 종류 ( 메타문자 ) 


1) ^  괄호안의 형식을 제외한다는 의미 혹은 텍스트 시작을 의미   

ㄱ. [^0-9] : [0-9]의 의미는 0~9 중 하나의 숫자가 해당 범위 안에 포함된다는 의미인데 이 [] 안에 ^가 들어가게되면 0~9를 제외한 나머지 메타문자들을 의미한다. 

ㄴ. ^[0-9] : [] 앞에 ^가 붙는 다면 텍스트의 시작을 의미하게 된다. 


2) $ : 문자열의 끝을 의미한다. 

ㄱ. b$ : 반드시 b로 끝나는 문자를 의미한다. 


3) \ : 메타문자를 표현하기위한 명령 

ㄱ. ab\.com : 정규식에서는 +, . , ? 등등 우리가 일반적으로 쓰는 표현들의 각각 의미를 가지고 있다. 하지만 실제 찾고자하는 텍스트 파일에서 +. ? 등등 이러한 고유의 문자를 찾고 싶을 때는 어떻게 해야할까? 바로 그떄 도와주는 것이 \ 이다. 

왼쪽 예제로 설명하자면  ab\.com은 ab.com을 찾기위한 정규식 표현인 것이다. 


4) . : 임의의 한문자 

ㄱ. a.b : a와 b사이에 임의의 한 문자가 들어간다. 예를 들자면 abc, adb, aFb 등등을 참고하면 된다. 


5) * : 없거나 하나이상의 문자 

ㄱ. a*b : 하나이상의 문자를 의미한다. 4번과 같은 예제로 설명하겠다. .같은 경우 abb, adb 한글자만 들어갈 수 있지만 b,ab,abbbbb adbbbb 등 a가 없거나 하나 이상의문자가 들어 갈 수 있다. 


6) + : 앞에 문자가 하나 이상 반복

ㄱ. a+b : 앞에 문자가 하나 이상반복되어야 하기때문에 현재 왼쪽 예제와 같이 a가 하나이상 반복됨을 뜻한다 (ex.aaaaaab)


7) {} : 숫자에 따른 반복갯수 

ㄱ. ab{3} : ab라는 문자가 3번 반복됨을 의미한다. (ex: ababab)


8) | : 또는 

ㄱ. a|b|c : a 또는 b 또는 c 가 일치함을 알 수 있음을 의미한다. 


9) () : 하나의 묶음 

ㄱ. (1|3) : 1 또는 3을 일치함을 알 수 있음을 의미한다 ( 묶어주는 역활 뿐인듯 ) 


10) [] : 괄호 안에 형식 일치  

ㄱ. [ab] : 괄호 안에 a , b , ab 이 3가지 형식이 다 일치함을 뜻한다. 

(위에서 [a-z], [0-9]의 예제를 설명했는데 -는 ~로 생각하면 될 것같다. [] 자체의 의미가 범위를 나타내는 것은 아니므로 오해하지 말길 바란다. )



2. 정규식 표현 종류 ( 이스케이프 ) 



1) \d : [0-9] 와 같은 의미이다 ( 0~9 까지 ) 


2) \D : 숫자([^0-9]) 를 제외한 문자 하나 


3) \s :