티스토리 뷰

JAVA

정규식(Regular Expression)

구글링쟁이 k9e4h 2017.04.18 14:56

정규식 TEST 싸이트

http://regexr.com/


정규식 관련 참고 싸이트 정리

http://blog.readiz.com/63

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
\0nThe character with octal value 0n (0 <= n <= 7)
\0nnThe character with octal value 0nn (0 <= n <= 7)
\0mnnThe character with octal value 0mnn (0 <= m <= 3, 0 <= n <= 7)
\xhhThe character with hexadecimal value 0xhh
\uhhhhThe 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)
\tThe tab character ('\u0009')
\nThe newline (line feed) character ('\u000A')
\rThe carriage-return character ('\u000D')
\fThe form-feed character ('\u000C')
\aThe alert (bell) character ('\u0007')
\eThe escape character ('\u001B')
\cx

The control character corresponding to x


ex> 

String regex="\\";


2) 문자 집합 규칙 (Character class)

- 대괄호를 사용한다


[abc]ab, or c (simple class)
[^abc]Any character except ab, 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]]de, 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)
\dA digit: [0-9]
\DA non-digit: [^0-9]
\hA horizontal whitespace character: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
\HA non-horizontal whitespace character: [^\h]
\sA whitespace character: [ \t\n\x0B\f\r]
\SA non-whitespace character: [^\s]
\vA vertical whitespace character: [\n\x0B\f\r\x85\u2028\u2029]
\VA non-vertical whitespace character: [^\v]
\wA word character: [a-zA-Z_0-9]
\WA 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' 카테고리의 다른 글

JsonRequester  (0) 2017.07.05
정규식(Regular Expression)  (0) 2017.04.18
JAVA equals 와 ==의 차이점  (0) 2017.03.17
Java Exception  (0) 2017.02.09
왜 JAVA에서 Enhanced For Loop를 사용하지 않을까?  (0) 2017.02.02
JAVA SWING 링크 정리  (0) 2016.12.06
댓글
댓글쓰기 폼