본문 바로가기

C.E/Java

Java 정규표현식

규표현식 문법

1) ‘.’ 특수문자

- 임의의 한 문자를 나타낸다.

- ‘.’ 특수문자가 위치한 곳에는 반드시 한 글자가 위치하여야 한다.

- ex ) 패턴 : a.b → 일치하는 문자열 : acb, adb, azb

- ex ) 패턴 : ab. → 일치하지 않는 경우 : ab, abcd

 

2) ‘*’ 특수문자

- 바로 앞의 문자를 0번 이상 반복한다.

- * 앞에는 한 글자 이상의 단어가 반드시 와야 한다.

- ex ) 패턴 : ab*c → abc, abbc, abbbc

- ex ) 패턴 : *ab → 불가능

 

3) ‘+’ 특수문자

- 바로 앞의 문자를 1번 이상 반복한다.

- + 앞에는 한 글자 이상의 단어가 반드시 와야 한다.

- ex ) 패턴 : a+b → aab, aaab, aaaab

- ex ) 패턴 : +ab → 불가능

 

4) ‘?’ 특수문자

- 특수문자 바로 앞의 문자가 하나 있거나 없는 것을 의미한다.

- ex ) 패턴 : try? 일치하는 문자열 : tr, try

패턴 : a?c → 일치하는 문자열 : c, ac

 

5) ‘^’ 특수문자

- 문장의 처음을 나타낸다.

- ex ) 패턴 : ^Hello 일치하는 문자열 : Hello abc, Hello world

Hello로 시작하는 문자열

 

6) ‘$’ 특수문자

- 문장의 끝을 나타낸다.

- ex ) 패턴 : world$ 일치하는 문자열 : hello world, welcome my world

world로 끝나는 문자열

 

7) ‘[]’ 특수문자

- 괄호 안의 문자 중 일치하는 것을 찾고자 할 경우 사용

- ex ) 패턴 : [abc] 일치하는 문자열 : a, b, c, ab, abc

[a-z]소문자가 포함된 모든 문자열

[A-Z]대문자가 포함된 모든 문자열

[0-9]숫자가 포함된 모든 문자열

^[a-zA-Z0-9]숫자가 영문자로 시작되는 모든 문자열

 

8) ‘[]’ 특수문자 안에서의 ‘^’ 특수문자

- []안의 문자와 일치하지 않는 문자열을 포함하고 있는 패턴을 의미한다

- ex ) 패턴 : [^abc]de .de패턴과 동일 (ade, bde, cde 제외)

 

9) ‘{}’ 특수문자

- 특수문자 앞의 문자나 문자열의 반복되는 개수를 말한다.

- ex ) go{5}ggle → gooooogle

go{3,}ggle → gooogle, goooogle, gooooogle (o3개 이상)

go{2,4}ggle → google, gooogle, goooogle (o2개이상 4개이하)

 

10) ‘()’ 특수문자

- ()안의 글자들을 하나의 문자로 본다.

- ex ) (hero_){3} → hero_hero_hero_

(hero_)* → null, hero_, hero_hero_

 

11) ‘|’ 특수문자

- 패턴 안에서 OR연산 사용시 사용

- ex ) man|woman → man, woman, manwoman, superman

 

12) 문자 클래스

- [] 안에서 자주 사용되는 패턴들을 미리 키워드로 정의하여 놓은 것

- 문자클래스는 PHP에서는 이용되지만 JAVA에서는 이용되지 않음

패턴

문자 클래스

J2SDK 1.4의 예

[a-zA-Z] : 모든 영문자

[[:alpha:]]

\p{Alpha}

[0-9] : 숫자

[[:digit:]]

\p{Digit}

[a-zA-Z0-9] : 영문자와 숫자

[[:alnum:]]

\p{Alnum}

공백

[[:space:]]

\p{Space}



 

javascript 에서 사용 !!!


 

# 매칭문자

\D : 숫자가 아닌 문자

\d : 숫자

\s : 공백문자

\w : [A-Z,a-z,0-9], 알파벳, 숫자로 된 문자, 밑줄기호

\W : \w를 제외한것

 

flag - i : 대/소문자 구분 없음

        g : 전역검색

        m : 여러줄 검색

 

정규식 매칭중 () 사용시 괄호로 묶은 패턴은 매칭후 그 부분을 기억하여 결과가 저장되는 배열에 같이 저장된다.

괄호로 묶은 부분만 저장된다.

 

ex1 ) var rgExp = /(^D*[0-9])/

        var str = "This is fun 01 stuff";

        var resultArray = str.match(rgExp);

        document.writeln(resultArray);        ==>  This is fun 0,This is fun 0

       

ex2 ) var rgExp = /(^D*)[0-9]/

        var str = "This is fun 01 stuff";

        var resultArray = str.match(rgExp);

        document.writeln(resultArray);        ==>  This is fun 0,This is fun

 

ex3 ) 숫자에 Comma 추가하기 (출처 : 바로가기 >> )

        function addComma(num) {
                  if(isNaN(num) == true) {
                        return 0;
                  }
                  var reg = /(^[+-]?\d+)(\d{3})/;
                  var strNum = num + '';
                  while(reg.test(strNum)) {
                        strNum = strNum.replace(reg, '$1' + ',' + '$2');
                  }
                  return strNum
           }

        ==> "123456789" -> (123456789 replace) -> "123456,789" -> (123456 replace) -> "123,456,789"

 

 

http://blog.naver.com/witchope/30077428568



 

자바 정규표현식

. : 임의의 한 문자(필수)
ex) ab. => abc, abd, abe

? : 바로 앞의 문자가 없거나 하나가 있음을 의미
ex) a?c => ac, abc, bc

* : 바로 앞의 문자가 없거나 하나 이상 반복
ex) ab* => a, ab, abb, abbb

+ : 바로 앞의 문자가 하나이상 반복
ex) ab+ => ab, abb, abb

^ : 문자열의 시작을 의미
ex) ^a => ab, abc, abcd

[^] : ^이후의 괄호안 형식은 제회
ex) ab[^c]+ : abd, abe, [^c] 자체가 한글자를 의미함

$ : 문자열의 끝을 의미
ex) abc$ : ab

[] : []안의 형식 일치
ex) [abc] : a, b, c, ab, ac, bc, abc

{} : {}앞 문자열 반복갯수
ex) ab{3} : ababab
    ab{2,} : ab, abab, ababab, abababab
    ab{1, 2} : ab, abab

() : ()안의 내용을 하나로 묶음
ex) (ab){2} : abab

| : or 연산
ex) (a|b|c) : a, b, c, ab, ac, bc, abc

[a-z] : 소문자
[A-Z] : 대문자
[0-9] : 숫자
[a-zA-Z0-9] : 영문, 숫자

자바에서 이용할 경우

String의 matchers 또는 Pattern 클래스와 Matchers 클래스 사용

 public static void main(String[] args) {
  String regExpStr = "^a.c$";
 
  String[] strArr = {"abc", "acc", "adc", "aec", "afc", "agc", "ahc", "aiic"};
 
  for(String str : strArr) {
   System.out.println("[" + str + "] : " + str.matches(regExpStr));
  }
 
  // email 형식 정규식
  // 개인적으로 해보니 ^$는 꼭 써줘야 겠음
  String regExpStr2 = "^[a-zA-Z0-9]+[@][a-zA-Z0-9]+[\\.][a-zA-Z0-9]+$";
 
  String emailStr = "babolsk@bbb.com";
 
  Pattern pattern = Pattern.compile(regExpStr2);
 
  Matcher match = pattern.matcher(emailStr);
 
  // 매칭에 맞을 경우 true
  System.out.println("[" + emailStr + "] : " + match.find());
 } 

 




 - http://hji.kr/tc/23 

'C.E > Java' 카테고리의 다른 글

자바 입력(scan)의 기본  (0) 2013.10.19
자바 입-출력 예외처리 (입/출력 관련)  (0) 2013.10.19
Java 정규표현식  (1) 2013.10.19
max함수  (0) 2013.10.19
sum 함수  (0) 2013.10.19
java  (0) 2013.10.19
  • 김윤승 2015.07.06 11:38


    정규식 질문입니다.. 제가 EditText 에 한글 영문만 입력되도록 정규식을 만들어 쓰고 있는데요..

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
    Pattern pattern = Pattern.compile("^[a-zA-Z가-힣ㄱ-ㅎㅏ-ㅣ\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]{0, 12}$");
    if (!pattern.matcher(source).matches()) {
    // 패턴에 맞지 않음
    return "XXX";
    }

    return null;
    }

    저 끝에 {0, 12} 이거를 좀 없애고 싶습니다.

    길이 검사를 안하고 싶어서 없애면 입력하자마자 XXX가 나오구요..

    12자가 넘어가도 XXX가 나와버려서 골치아픕니다

    또 0, 100 으로 넣으면 패턴신텍스에러가 나오면서 안된다하구..

    어떻게 하나요? 글자 수 제한을 안걸려면요..