출처: http://sexy.pe.kr/tc/532

그림으로 너무 잘 설명해 주신 거 같아서 퍼왔는데, 블로그에 댓글 달기가 안되서 허락을 못 구했다. 혹시 주인장 분이 지우라고 하면 지우겠습니다. 

Matcher 클래스 메서드들

find() : 패턴이 일치하는 경우 true를 반환하고, 그 위치로 이동(여러개가 매칭되는 경우 반복 실행가능)
find(int start) : start위치 이후부터 매칭검색을 수행
start() : 매칭되는 문자열 시작위치 반환
start(int group) : 지정된 그룹이 매칭되는 시작위치 반환
end() : 매칭되는  문자열 끝 다음 문자위치 반환
end(int group) : 지정되 그룹이 매칭되는 끝 다음 문자위치 반환

group() : 매칭된 부분을 반환
group(int group) : 매칭된 부분중 group번 그룹핑 매칭부분 반환
groupCount() : 패턴내 그룹핑한(괄호지정) 전체 갯수 반환
matches() : 패턴이 전체 문자열과 일치할 경우 true 반환


그룹화 이해하기

패턴 내에서 그룹을 지정하기 위해서 ()를 통해 그룹을 설정해주면 되고, () 갯수만큼 그룹이 만들어 진다.



위 예제에서는 2개의 그룹이 설정이 되었으며, 각 그룹은 group()메서드를 통해 1,2번으로 접근이 가능하다.
group()나 group(0) 메서드는 매칭된 전체 문자열을 반환한다.



매칭 위치 반환

start()메서드를 통해 패턴이 일치하는 문자열의 시작 위치와 end() 메서드를 통해 패턴이 끝나는 문자열의 다음 문자위치를 반환한다.



end() 메서드가 패턴이 일치하는 문자열의 끝부분 위치가 아닌 끝부분 다음 문자의 위치라는 것을 확인하자.

start(int group)와 end(int group)에 group이 지정되는 경우 해당 그룹이 매칭되는 위치를 반환하게 된다.

이보다 더 많은 메서드들이 있지만 이정도만 알아도 기본적인 패턴 매칭하는데는 문제가 없어 보인다^^

Posted by 제로스틴
,


출처 C.E/Java2013/10/19 09:59

java.util.regex 패키지에 있는Match 클래스와 Pattern 클래스를 이용하여 문자열을 정규검증식으로 나타낼 수 있습니다.

 

boolean flag = Pattern.matches("^[a-zA-Z0-9]*$", strInput); 

 정규표현식의 내용은 다음을 의미합니다.

 

1) ^ : 문자열의 시작

2) $ : 문자열의 종료

3) . : 임의의 한 문자 (문자의 종류와 관계없음)

4) | : or의 의미임

5) ? : 앞 문자가 없거나 하나 있을때

6) + : 앞 문자가 하나 이상임 (최소 한개 이상)

7) * : 앞 문자가 없을 수도 있고, 무한정 많을 수도 있음

8) [] : 문자 클래스의 지정, 문자의 집합이나 범위를 나태내면 - 기호를 사용한다. [] 내에서 ^를 사용하면 not의 의미임

9) {} : 횟수나 범위를 나타냄. 예를 들어 k{5}의 경우 k가 5번 반복되는 경우임, a{3,5}는 a가 3번 이상 5번 이하 반복되는 경우임

10) \w : 알파벳이나 숫자

11) \W : \w의 not. 즉 알파벳이나 숫자를 제외한 문자

12) \d : [0-9]와 동일

13) \D : 숫자를 제외한 모든 문자

 

기본적인 정규 표현식과 그 예를 모아보면 다음과 같습니다.

 

1) 숫자만 : ^[0-9]*$

2) 영문자만 : ^[a-zA-Z]*$

3) 한글만 : ^[가-힣]*$

4) 영어 & 숫자만 : ^[a-zA-Z0-9]*$

5) E-Mail : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$

6) 휴대폰 : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$

7) 일반전화 : ^\d{2.3} - \d{3,4} - \d{4}$

8) 주민등록번호 : \d{6} \- [1-4]\d{6}

9) IP 주소 : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})

 

이외에 자주 써먹는 정규식을 계속 모아야겠네요. ^^


Posted by 제로스틴
,


출처 : C.E/Java2013/10/19 09:57

◈ 규표현식 문법

1) ‘.’ 특수문자

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

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

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

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

 

2) ‘*’ 특수문자

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

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

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

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

 

3) ‘+’ 특수문자

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

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

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

- 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 등 (o가 3개 이상)

go{2,4}ggle → google, gooogle, goooogle (o가 2개이상 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 : 공백문자 [\f\n\r\t\v] 와 같다.)

\S: 공백 문자가 아닌 모든 문자 ( [^\f\n\r\t\v] 와 같다.)

\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 


Posted by 제로스틴
,