반응형
아~~~ 정말 오랜만에 글을 쓴다.
애기들 공부 가르키다가, 새롭게 기억이 쏙쏙 돛아나는 정규식~ 매번 공부해야겠다고 마음은 먹지만 못하는 이놈.ㅋㅋㅋ
정규식이란 놈은 골때린다. 그 이유인즉, Java, 기타 툴, DB 등등 각각의 엔진마다 조금씩 다르기 때문이다.
휴~~ 그래서 우선 Java에서 쓰이는 정규식만 정리를 해보도록 하자.
머 내가 정리한다기 보다는 Java API에 있는것들 어느정도 해석해서 적어보도록 하겠다.
테스트를 위해서는 아래 코드를 활용하면 쉽게 테스트 가능하다.
우선 Java에서 아주 쉽게 사용할 수 있는것 부터 소개 하도록 하겠다.
정규식에 대해서 기타 다른 프로그램도 동일하게 적용되는 부분이다. API에서는 이 부분을 "Predefined character classes"
라고 명명하였다.
[1] Predefined character classes
위의 Pattern은 모든 정규식에서 공통적으로 이용되는 정규식이기 때문에 외우두면 개발하기 매우 편하다.
다음으로 POSIX 에서 정의한 정규표현식을 알아보도록 하자. POSIX에서 정의한 정규표현식도 Java에서는 사용가능하다.
[2] POSIX character classes
위의 POSIX Pattern 자체가 좀 더 눈으로 식별하기는 쉬운 느낌이 든다.
[1] 과 [2] 외에도 여러가지 정규 표현식 들이 존재한다.
하지만, 내 생각에는 [1]과 [2]의 표현식 정도면 외우고 있고 적당히 조합을 하면 왠만한 문자열 패턴을 찾는
것은 쉬울것이라 생각한다.
정규표현식은 잘쓰면 복잡한 코드를 상당히 줄 일 수 있는 아주 유용한 표현식이다. 어느정도 익혀 놓는다면
개발자가 퀀텀점프 할 수 있는 좋은 계기가 될 것이라 생각한다.
- 2012.01.20 랑이씀 -
애기들 공부 가르키다가, 새롭게 기억이 쏙쏙 돛아나는 정규식~ 매번 공부해야겠다고 마음은 먹지만 못하는 이놈.ㅋㅋㅋ
정규식이란 놈은 골때린다. 그 이유인즉, Java, 기타 툴, DB 등등 각각의 엔진마다 조금씩 다르기 때문이다.
휴~~ 그래서 우선 Java에서 쓰이는 정규식만 정리를 해보도록 하자.
머 내가 정리한다기 보다는 Java API에 있는것들 어느정도 해석해서 적어보도록 하겠다.
테스트를 위해서는 아래 코드를 활용하면 쉽게 테스트 가능하다.
public class Test { String tmp = "0A가B1abc나2C32dd2ⓔ34DDD다d"; for (int i = 0; i < tmp.length(); i++) { |
우선 Java에서 아주 쉽게 사용할 수 있는것 부터 소개 하도록 하겠다.
정규식에 대해서 기타 다른 프로그램도 동일하게 적용되는 부분이다. API에서는 이 부분을 "Predefined character classes"
라고 명명하였다.
[1] Predefined character classes
. | Any character : 어떤 문자든 . 으로 표현한다. |
\d | A digit: [0-9] : 0부터 9까지의 숫자 |
\D | A non-digit: [^0-9] : 0~9까지의 숫자 가 아닌 것 |
\s | A whitespace character: [ \t\n\x0B\f\r] : 띄워쓰기 |
\S | A non-whitespace character: [^\s] : 띄워쓰기가 아닌문자 |
\w | A word character: [a-zA-Z_0-9] : 대.소문자 영문자 + 숫자 |
\W | A non-word character: [^\w] : (대.소문자 영문자 + 숫자) 가 아닌것 |
위의 Pattern은 모든 정규식에서 공통적으로 이용되는 정규식이기 때문에 외우두면 개발하기 매우 편하다.
다음으로 POSIX 에서 정의한 정규표현식을 알아보도록 하자. POSIX에서 정의한 정규표현식도 Java에서는 사용가능하다.
[2] POSIX character classes
\p{Lower} | A lower-case alphabetic character: [a-z] : 영어 소문자 |
\p{Upper} | An upper-case alphabetic character:[A-Z] : 영어 대문자 |
\p{ASCII} | All ASCII:[\x00-\x7F] : 아스키코드로 표현가능한 모든 문자 |
\p{Alpha} | An alphabetic character:[\p{Lower}\p{Upper}] : 모든 알파벳(대.소문자 포함) |
\p{Digit} | A decimal digit: [0-9] : 0~9까지의 숫자 |
\p{Alnum} | An alphanumeric character:[\p{Alpha}\p{Digit}] : 알파뉴메릭(대.소문자 영문자 + 숫자) |
\p{Punct} | Punctuation: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ : 키보드로 표현가능한 특수문자 |
\p{Graph} | A visible character: [\p{Alnum}\p{Punct}] : 알파뉴메릭 + 키보드로 표현가능한 특수문자 |
\p{Print} | A printable character: [\p{Graph}\x20] : 알파뉴메릭 + 키보드로 표현가능한 특수문자 |
\p{Blank} | A space or a tab: [ \t] : 띄워쓰기 또는 Tab |
\p{Cntrl} | A control character: [\x00-\x1F\x7F] : 요건 나도 뭔지 잘 모름 ???? |
\p{XDigit} | A hexadecimal digit: [0-9a-fA-F] : 16진수로 표현가능한 문자 |
\p{Space} |
A whitespace character: [ \t\n\x0B\f\r] : Tab , Enter, Carrige Return 문자 |
위의 POSIX Pattern 자체가 좀 더 눈으로 식별하기는 쉬운 느낌이 든다.
[1] 과 [2] 외에도 여러가지 정규 표현식 들이 존재한다.
하지만, 내 생각에는 [1]과 [2]의 표현식 정도면 외우고 있고 적당히 조합을 하면 왠만한 문자열 패턴을 찾는
것은 쉬울것이라 생각한다.
마지막으로, 한글을 어떻게 하면 걸러낼 수 있을까? 라는 의문점이 든다. 모든 정규표현식은 한글이 아닌 US 문자를 기준 으로 구현되었기 때문에 한글의 경우는 과연 어떻게 할까? 우선 정답은 다음과 같다.
대략 보면 다음과 같다. (1) 모든 한글은 ㄱ 으로 시작해서 ㅎ 으로 끝난다. (2) 모든 모음은 ㅏ 로 시작해서 ㅣ 로 끝난다. (3) (1)과 (2)을 모두 조합해 보았을때 모든 문자는 가 로 시작해서 힣 으로 끝이 난다. |
정규표현식은 잘쓰면 복잡한 코드를 상당히 줄 일 수 있는 아주 유용한 표현식이다. 어느정도 익혀 놓는다면
개발자가 퀀텀점프 할 수 있는 좋은 계기가 될 것이라 생각한다.
- 2012.01.20 랑이씀 -
반응형
'Program > JAVA' 카테고리의 다른 글
ShellScript를 이용한 jar파일만들기 (0) | 2012.08.09 |
---|---|
JAVA에서 윈도우 명령어 실행하기 (0) | 2012.06.14 |
[ Vector와 ArrayList의 차이점] (2) | 2010.11.22 |
POJO(Plain Old Java Object) 란? (5) | 2010.11.05 |
Abstract Class란? (0) | 2010.09.16 |