Pattern 클래스 와 Matcher 클래스 에 대한 자세 한 설명

자바 정규 표현 식 은 자바.util.regex 패키지 의 Pattern 류 와 Matcher 류 를 통 해 이 루어 집 니 다. Pattern 클래스 는 정규 표현 식 을 만 드 는 데 사 용 됩 니 다.일치 하 는 모드 를 만 드 는 것 도 가능 합 니 다.구조 방법 은 개인 적 인 것 이 므 로 직접 만 들 수 는 없 지만 Pattern.coplie(String regex)간단 한 공장 방법 으로 정규 표현 식 을 만 들 수 있 습 니 다. 
Java    : 
Pattern p=Pattern.compile("\\w+"); 
p.pattern();//   \w+ 

pattern()은 정규 표현 식 의 문자열 형식 을 되 돌려 줍 니 다.사실은 Pattern.copile(String regex)의 regex 인 자 를 되 돌려 줍 니 다.
1.Pattern.split(CharSequence input) Pattern 은 문자열 을 구분 하고 String[]을 되 돌려 주 는 split(CharSequence input)방법 이 있 습 니 다.String.split(String regex)는 Pattern.split(CharSequence input)을 통 해 이 루어 진 것 이 라 고 생각 합 니 다. 
Java    : 
Pattern p=Pattern.compile("\\d+"); 
String[] str=p.split("  QQ :456456     :0532214     :[email protected]"); 

결과:str[0]="나의 QQ 는:"str[1]="나의 전 화 는:"str[2]="나의 메 일 은:"[email protected]"
2.Pattern.matcher(String regex,CharSequence input)는 문자열 을 빠르게 일치 시 키 는 정적 방법 입 니 다.이 방법 은 한 번 만 일치 하고 모든 문자열 과 일치 하 는 데 적합 합 니 다. 
Java    : 
Pattern.matches("\\d+","2223");//  true 
Pattern.matches("\\d+","2223aa");//  false,              true,  aa      
Pattern.matches("\\d+","22bb23");//  false,              true,  bb      

3.Pattern.matcher(CharSequence input) 
이렇게 많은 말 을 했 는데 드디어 Matcher 류 가 등장 할 차례 입 니 다.Pattern.matcher(CharSequence input)는 Matcher 대상 을 되 돌려 줍 니 다. 
Matcher 류 의 구조 방법 도 개인 적 인 것 입 니 다.함부로 만 들 수 없고 Pattern.matcher(CharSequence input)방법 으로 만 이러한 인 스 턴 스 를 얻 을 수 있 습 니 다. 
Pattern 류 는 간단 한 일치 동작 만 할 수 있 습 니 다.더 강하 고 편리 한 정규 일치 동작 을 얻 으 려 면 Pattern 을 Matcher 와 함께 합작 해 야 합 니 다.Matcher 류 는 정규 표현 식 에 대한 그룹 지원 과 정규 표현 식 에 대한 여러 번 의 일치 지원 을 제공 합 니 다. 
Java    : 
Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 
m.pattern();//  p       Matcher      Pattern       

4.Matcher.matches()/ Matcher.lookingAt()/ Matcher.find() 
Matcher 클래스 는 세 가지 일치 하 는 조작 방법 을 제공 합 니 다.세 가지 방법 은 모두 boolean 형식 으로 돌아 갑 니 다.일치 할 때 true 로 돌아 가 고 일치 하지 않 으 면 false 로 돌아 갑 니 다. 
matches()는 전체 문자열 을 일치 시 킵 니 다.전체 문자열 이 일치 해 야 true 로 돌아 갑 니 다. 
Java    : 
Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 
m.matches();//  false,  bb   \d+  ,            . 
Matcher m2=p.matcher("2223"); 
m2.matches();//  true,  \d+          

Pattern.matcher(String regex,CharSequence input)를 돌 이 켜 보 겠 습 니 다.아래 코드 와 등가 입 니 다. 
Pattern.compile(regex).matcher(input).matches() 
lookingAt()은 앞의 문자열 을 일치 시 킵 니 다.일치 하 는 문자열 만 맨 앞 에 있어 야 true 로 돌아 갑 니 다. 
Java    : 
Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 
m.lookingAt();//  true,  \d+       22 
Matcher m2=p.matcher("aa2223"); 
m2.lookingAt();//  false,  \d+       aa 

find()문자열 을 일치 시 킵 니 다.일치 하 는 문자열 은 모든 위치 에 있 습 니 다. 
Java    : 
Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 
m.find();//  true 
Matcher m2=p.matcher("aa2223"); 
m2.find();//  true 
Matcher m3=p.matcher("aa2223bb"); 
m3.find();//  true 
Matcher m4=p.matcher("aabb"); 
m4.find();//  false 

5.Mathcer.start()/ Matcher.end()/ Matcher.group() 
matches(),lookingAt(),find()를 사용 하여 일치 하 는 동작 을 수행 하면 상기 세 가지 방법 으로 더 자세 한 정 보 를 얻 을 수 있 습 니 다. 
start()문자열 에 일치 하 는 하위 문자열 의 색인 위 치 를 되 돌려 줍 니 다. 
end()는 일치 하 는 하위 문자열 의 마지막 문자 가 문자열 에 있 는 색인 위 치 를 되 돌려 줍 니 다. 
group()일치 하 는 하위 문자열 되 돌려 주기 
Java    : 
Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 
m.lookingAt();//  true,  \d+       22 
Matcher m2=p.matcher("aa2223"); 
m2.lookingAt();//  false,  \d+       aa 

Mathcer m2=m.matcher("2223bb"); 
m.lookingAt();   //  2223 
m.start();   //  0,  lookingAt()          ,     lookingAt()   ,start()      0 
m.end();   //  4 
m.group();   //  2223 


Matcher m3=m.matcher("2223bb"); 
m.matches();   //        
m.start();   //  0,           
m.end();   //  6,          ,  matches()          
m.group();   //  2223bb 

이렇게 많아 start(),end(),group()은 모두 재 부팅 방법 이 있 습 니 다.start(int i),end(int i),group(int i)은 그룹 작업 에 만 사용 되 고 Mathcer 류 는 groupCount()가 몇 그룹 으로 되 돌아 가 는 지 에 사 용 됩 니 다. 
Java    : 
Pattern p=Pattern.compile("([a-z]+)(\\d+)"); 
Matcher m=p.matcher("aaa2223bb"); 
m.find();   //  aaa2223 
m.groupCount();   //  2,   2  
m.start(1);   //  0                        
m.start(2);   //  3 
m.end(1);   //  3                               . 
m.end(2);   //  7 
m.group(1);   //  aaa,              
m.group(2);   //  2223,              

지금 우 리 는 약간 고 급 스 러 운 정규 일치 동작 을 사용 합 니 다.예 를 들 어 텍스트 가 있 습 니 다.안에 많은 숫자 가 있 습 니 다.그리고 이 숫자 들 은 분 리 된 것 입 니 다.우 리 는 지금 텍스트 의 모든 숫자 를 꺼 내 려 고 합 니 다.자바 의 정규 조작 을 이용 하 는 것 이 그렇게 간단 합 니 다. 
Java    : 
Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("  QQ :456456      :0532214      :[email protected]"); 
while(m.find()) { 
     System.out.println(m.group()); 
} 

  : 
456456 
0532214 
123 

    while()      
while(m.find()) { 
     System.out.println(m.group()); 
     System.out.print("start:"+m.start()); 
     System.out.println(" end:"+m.end()); 
} 
   : 
456456 
start:6 end:12 
0532214 
start:19 end:26 
123 
start:36 end:39 

일치 하 는 동작 을 수행 할 때마다 start(),end(),group()세 가지 방법의 값 이 바 뀌 고 일치 하 는 하위 문자열 의 정보 로 바 뀌 며 재 업로드 방법 도 해당 하 는 정보 로 바 뀌 는 것 을 알 아야 합 니 다. 
메모:일치 하 는 작업 이 성공 해야만 start(),end(),group()세 가지 방법 을 사용 할 수 있 습 니 다.그렇지 않 으 면 자바.lang.IllegalState Exception,즉 matches(),lookingAt(),find()중 임의의 방법 이 true 로 돌아 갈 때 만 사용 할 수 있 습 니 다.
클릭 하여 링크 열기

좋은 웹페이지 즐겨찾기