2022.09.20 업데이트
다양한 입력케이스를 정규표현식을 통해 코드를 간결하게 처리할 수 있다.
약간의 차이가 있지만 다양한 언어와 프로그램에서 지원하는 범용성이 뛰어난 문법
크롤링할때 많이 사용됨
정규식 패턴도 성능 개선을 할 수 있다. *참고 : https://lktgt.tistory.com/33
java의 Pattern 객체는 static, final 등과 같이 써서 재컴파일을 하지 않도록 하는 것이 성능 개선에 도움이됨
정규식 TEST 싸이트
정규식 종류
- 한 문자를 표현하는 정규식
- 한 문자의 반복 횟수를 지정하는 정규식
- 문자열의 시작과 끝을 지정하는 정규식
- 단어를 표현하기 위한 그룹 지정 정규식
- 순환 반복을 지정하기 위한 그룹 지정 정규식
- 이스케이프 문자 표현 정규식
1) 기본 문자 규칙 (Characters)
- java에서 \는 escape 문자이므로 \\로 작성해도 \로 나타난다.
\\ | The backslash character |
\0n | The character with octal value 0n (0 <= n <= 7) |
\0nn | The character with octal value 0nn (0 <= n <= 7) |
\0mnn | The character with octal value 0mnn (0 <= m <= 3, 0 <= n <= 7) |
\xhh | The character with hexadecimal value 0xhh |
\uhhhh | The character with hexadecimal value 0xhhhh |
\x{h...h} | The character with hexadecimal value 0xh...h (Character.MIN_CODE_POINT <= 0xh...h <= Character.MAX_CODE_POINT) |
\t | The tab character ('\u0009') |
\n | The newline (line feed) character ('\u000A') |
\r | The carriage-return character ('\u000D') |
\f | The form-feed character ('\u000C') |
\a | The alert (bell) character ('\u0007') |
\e | The escape character ('\u001B') |
\cx | The control character corresponding to x |
ex>
String regex="\\";
2) 문자 집합 규칙 (Character class)
- 대괄호를 사용한다
[abc] | a, b, or c (simple class) |
[^abc] | Any character except a, b, or c (negation) |
[a-zA-Z] | a through z or A through Z, inclusive (range) |
[a-d[m-p]] | a through d, or m through p: [a-dm-p] (union) |
[a-z&&[def]] | d, e, or f (intersection) |
[a-z&&[^bc]] | a through z, except for b and c: [ad-z] (subtraction) |
[a-z&&[^m-p]] | a through z, and not m through p: [a-lq-z](subtraction) |
ex))
String regex="[abc]"; // a|b|c 문자 중에서 한개
String regex="[a-z]" // a~z까지 중에서 문자 1개 : 소문자 하나
String regex="[a-zA-z_]"; // 대소문자 or 언더라인(_) 1개, 여러개 이을때 csv가 없는듯
String regex="[^a-z]"; // a-z 빼고 모두
String regex="[a-dx-z]"; // a~d, x~z만 허용
3) 미리 정의된 규칙 (Predefined character classes, not user definition)
. | Any character (may or may not match line terminators) |
\d | A digit: [0-9] |
\D | A non-digit: [^0-9] |
\h | A horizontal whitespace character: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000] |
\H | A non-horizontal whitespace character: [^\h] |
\s | A whitespace character: [ \t\n\x0B\f\r] |
\S | A non-whitespace character: [^\s] |
\v | A vertical whitespace character: [\n\x0B\f\r\x85\u2028\u2029] |
\V | A non-vertical whitespace character: [^\v] |
\w | A word character: [a-zA-Z_0-9] |
\W | A non-word character: [^\w] |
ex))
String regex="."; // 어떤 한개의 문자
String regex="\\d"; // 0-9까지의 숫자 , \d 이지만 java에서 \는 escape 문자이므로 하나더 써줘야해!
String regex="\\w"; // [0-9a-zA-z_] 비밀번호 할때 많이하는 확인ㅋㅋㅋ
4) 문자의 개수 지정하기 (greedy quantifiers)
X? | X, once or not at all |
X* | X, zero or more times |
X+ | X, one or more times |
X{n} | X, exactly n times |
X{n,} | X, at least n times |
X{n,m} | X, at least n but not more than m times |
ex>
String regex="a"; // a 한개
String regex="a?"; // ? : 0 or 1 // + : 1이상// * : 0이상
String regex="a{3}" // 3개
String regex="a{3,}"; // 3이상, 뒤에 숫자는 제한갯수
5) 문자의 순서
String regex="ab"; // a다음에 반드시 b가 와야해
String regex="ab?"; // a다음에 b가 오거나 말거나
String regex="(ab)?"; // ab가 있거나 없거나
String regex="a|b"; // a,b 둘중하나가 반드시 있어야한다
String regex="(a|b)+"; // a또는 b가 한개 이상
String regex="\."; // .:어떤문자 // . 자체를 표현하기 위해서는 역슬래시를 써야한다 ?? 에러남
6) 예제
// 전화번호 검증해보기
String regex="(\\d{2,4}-)?\\d{3,4}-\\d{4}"; // 지역번호는 있을때도 있고 없을때도 있으니까
//이메일 검증해보기
String regex="\\w+@\\w+\\.[a-zA-A]{2,10}";
//암호 검증해보기
String regex="(?=.+[0-9])(?=.*[a-zA-z])(?>.*[!@?]).*{4,8}";
참고 사이트
정규식 Step By Step
http://zvon.org/comp/r/tut-Regexp.html
자주 쓰이는 정규식
http://gocoding.tistory.com/93
Meta 정보 정리
http://www.devholic.net/1000238
'JAVA' 카테고리의 다른 글
[JAVA] List, ArrayList (0) | 2017.09.22 |
---|---|
JsonRequester (0) | 2017.07.05 |
JAVA equals 와 ==의 차이점 (0) | 2017.03.17 |
왜 JAVA에서 Enhanced For Loop를 사용하지 않을까? (0) | 2017.02.02 |
JAVA SWING 링크 정리 (0) | 2016.12.06 |