티스토리 뷰
정규식 TEST 싸이트
정규식 관련 참고 싸이트 정리
http://gocoding.tistory.com/93
비밀번호 규칙 체크나, 특정한 것을 뽑아내야할때 직접 분석기를 만들 것인가? 아니지~
java에서만 적용되는 것이 아니라 모든 언어에서 적용되는 표현식
DBMS를 사용하려면 그 DBMS에 상관없이 SQL을 배워야하듯이 정규식 분석을 하려면 이것을 알아야한다!
이거만 한달 판다해도 시간 아깝지 않은 가치있는 것이다.
parsing, parser 만들때 꼭 기억하고 사용하자!
< reular expression API>
API 들어가는 방법 : J2SE ver8 API -> java.lang -> String -> matches -> regular expression
file:///C:/z.utility/01.J2SE%20Platform(JDK)/1.8/docs/api/index.html :: regular expression
< 기본 Java>
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
String regex=null;
Scanner keyScan = new Scanner(System.in);
String value = null;
while(true){
System.out.println("입력 : ");
value=keyScan.nextLine();
if(value.equals("quit"))
break;
System.out.println(value.matches(regex));
}
keyScan.close();
}
}
< String regex에 넣을 값들 >
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}";
'JAVA' 카테고리의 다른 글
[JAVA] enum (0) | 2018.05.04 |
---|---|
JsonRequester (0) | 2017.07.05 |
정규식(Regular Expression) (0) | 2017.04.18 |
JAVA equals 와 ==의 차이점 (0) | 2017.03.17 |
왜 JAVA에서 Enhanced For Loop를 사용하지 않을까? (0) | 2017.02.02 |
JAVA SWING 링크 정리 (0) | 2016.12.06 |
- Total
- 128,897
- Today
- 9
- Yesterday
- 130
- resolve
- Dependency Injection
- javascript
- Web
- MVC
- 해결
- angularjs
- 원인
- 개발자
- front end
- database
- java
- jquery
- 라우팅
- 오류
- navitagion
- error
- 앵귤러
- http
- 문제
- Framework
- front
- MySQL
- 오류관리
- routing
- angularjs 2.0
- 2.0
- db
- 오류해결
- DI