자바 정규 표현 식 기초 입문 지식

프로그램 개발 에 서 는 문자열 을 일치,검색,교체,판단 해 야 하 는 상황 이 발생 하 는 것 으로 알려 져 있 으 며,이러한 상황 은 때로는 복잡 하기 도 하 며,순 인 코딩 방식 으로 해결 하면 프로그래머 의 시간 과 정력 을 낭비 하 는 경우 가 많다.따라서 정규 표현 식 을 배우 고 사용 하 는 것 이 이 갈등 을 해결 하 는 주요 수단 이 되 었 다.
정규 표현 식 은 패턴 일치 와 교체 에 사용 할 수 있 는 규범 으로 정규 표현 식 은 일반적인 문자(예 를 들 어 문자 a 에서 z)와 특수 문자(메타 문자)로 구 성 된 문자 모드 로 문자 주 체 를 찾 을 때 일치 하 는 문자열 하나 이상 을 설명 합 니 다.정규 표현 식 은 템 플 릿 으로 검색 한 문자열 과 일치 합 니 다.
정규 표현 식
    1.정의:정규 표현 식 은 패턴 일치 와 교체 에 사용 할 수 있 는 규범 입 니 다.정규 표현 식 은 일반적인 문자(예 를 들 어 문자 a 에서 z)와 특수 문자(메타 문자)로 구 성 된 문자 모드 입 니 다.문자 주 체 를 찾 을 때 일치 하 는 문자열 이나 여러 개 를 설명 합 니 다.정규 표현 식 은 템 플 릿 으로 검색 한 문자열 과 일치 합 니 다.
    2.용도:
문자열 일치(문자 일치)
문자열 찾기
문자열 바 꾸 기
문자열 분할
    예 를 들 면:
웹 페이지 에서 이메일 주 소 를 꺼내다
IP 주소 가 정확 한 지
웹 페이지 에서 링크 를 끄집어내다
    3.자바 에서 정규 표현 식 을 처리 하 는 클래스:
java.lang.String
java.util.regex.Pattern:패턴 클래스:문자열 이 일치 하 는 모드 입 니 다.이 모드 자체 가 컴 파일 되 었 습 니 다.사용 하면 효율 이 높 습 니 다.
java.util.regex.Matcher:일치 클래스:이 모드 는 어떤 문자열 에 일치 하 는 결과 입 니 다.이 결 과 는 여러 개 있 을 수 있 습 니 다.
    4:다음 작은 프로그램 을 통 해 정규 표현 식 을 간단하게 소개 합 니 다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
 public static void main(String[] args) {
  //matches()              ,"."        
  p("abc".matches("..."));
  //    "a2389a"     *  ,\d   “0--9”  
  p("a2389a".replaceAll("\\d", "*"));
  //    a--z       3        ,          
  Pattern p = Pattern.compile("[a-z]{3}");
  //    ,        Matcher   
  Matcher m = p.matcher("abc");
  p(m.matches());
  //                  
  p("abc".matches("[a-z]{3}"));
 }
 public static void p(Object o){
  System.out.println(o);
 }
} 
다음은 인쇄 결과 입 니 다.
true
a****a
true
true
 현재 일부 실험 을 통 해 정규 표현 식 의 일치 규칙 을 설명 합 니 다.여 기 는 Greedy 방식 입 니 다.
  .              모든 문자
 a?             a.한 번 또는 한 번 도 없어 요.
 a*             0 회 혹은 여러 번
 a+            한 번 혹은 여러 번
 a{n}?      마침 n 회
 a{n,}?       적어도 n 회
 a{n,m}?   a.적어도 n 번 이지 만 m 번 을 넘 지 않 는 다.
        //초보 적 인식.*+?
        p("a".matches("."));//true
        p("aa".matches("aa"));//true
        p("aaaa".matches("a*"));//true
        p("aaaa".matches("a+"));//true
        p("".matches("a*"));//true
        p("aaaa".matches("a?"));//false
        p("".matches("a?"));//true
        p("a".matches("a?"));//true
        p("1232435463685899".matches(" \\d{3,100}"));//true
        p("192.168.0.aaa".matches(" \\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));//false
        p("192".matches("[0-2][0-9][0-9]"));//true
[abc]                        a,b 또는 c(단순 클래스)
[^abc]                      a,b 또는 c 를 제외 한 모든 문자
[a-zA-Z]                   a 에서 z 또는 A 에서 Z 까지 양쪽 의 자모 가 포함 되 어 있다(범위).
[a-d[m-p]]                a 에서 d 또는 m 에서 p:[a-dm-p](집합)
[a-z&&[def]]             d.e 또는 f(교차)
[a-z&&[^bc]]             a 에서 z 까지 b 와 c:[ad-z](빼 기)
[a-z&&[^m-p]]            a 에서 z,m 에서 p 가 아 닌[a-lq-z](빼 기)
        //범위.
        p("a".matches("[abc]"));//true
        p("a".matches("[^abc]"));//false
        p("A".matches("[a-zA-Z]"));//true
        p("A".matches("[a-z]|[A-Z]"));//true
        p("A".matches("[a-z[A-Z]]"));//true
        p("R".matches("[A-Z&&[RFG]]"));//true
\d                          숫자:[0-9]
\D                         비 숫자:[^0-9]
\s                          공백 문자:[\t\x0B\f\r]
\S                         비 공백 문자:[^\]
\w                         단어 문자:[a-zA-Z0-9]
\W                        단어 가 아 닌 문자:[^\w]
         //알다
        p("\r\t".matches(" \\s(4)"));//false
        p(" ".matches(" \\S"));//false
        p("a_8 ".matches(" \\w(3)"));//false
        p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));//true
        p(" \\".matches("\\\\"));//true
 경계 정합 기
      ^                                          줄 의 첫머리
      $                                          행 의 끝
      \b                                        단어 경계
      \B                                        비 단어 경계
      \A                                        입력 의 시작
      \G                                       이전 일치 하 는 끝
      \Z                                       입력 한 끝 은 마지막 끝 문자 에 만 사 용 됩 니 다(있 으 면)
      \z                                       입력 의 끝
        //경계 일치
        p("hello sir".matches("^h.*"));//true
        p("hello sir".matches(".*ir$"));//true
        p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));//true
        p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));//false
        //공백 줄:하나 이상(공백 및 비 줄 바 꿈)으로 시작 하고 줄 바 꿈 으로 끝 냅 니 다.
        p(" ".matches("^[\\s&&[^\]]*\$"));//true
 방법 해석
matches():전체 문자열 과 일치 합 니 다.
find():짝 짓 기 문자열
lookingAt():전체 문자열 의 시작 부분 부터 영원히 일치 합 니 다.
//email
        p(" [email protected]".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));//true
       
        //matches() find() lookingAt()
        Pattern p = Pattern.compile(" \\d{3,5 }");
        Matcher m = p.matcher("123-34345-234-00");
       
        //"123-34345-234-00"전 체 를 정규 표현 식 엔진 으로 일치 하 는 것 을 찾 습 니 다.첫 번 째"-"가 일치 하지 않 으 면 중단 합 니 다.
        //하지만 맞지 않 는"-"뱉 지 않 아 요."
        p(m.matches());
        //일치 하지 않 는"-"토 해 내기"
        m.reset();
       
        //1:앞 에 p(m.matches()가 있 을 때;하위 문자열 찾기"...34345-234-00"부터 시작 합 니 다.
        //1,2,2 번 이 될 겁 니 다.'34345'와'234'뒤에 2 개 는 false 로 나 오지 않 습 니 다.
        //2:앞 에 p(m.matches()가 있 을 때;m.reset();하위 문자열 찾기"123-34345-234-00"부터 시작 합 니 다.
        //true,true,true,false
        p(m.find());
        p(m.start()+"---"+m.end());
        p(m.find());
        p(m.start()+"---"+m.end());
        p(m.find());
        p(m.start()+"---"+m.end());
        p(m.find());
        //못 찾 으 면 이상 java.lang.IllegalStateException
        //p(m.start()+"---"+m.end());
       
        p(m.lookingAt());
        p(m.lookingAt());
        p(m.lookingAt());
        p(m.lookingAt());
문자열 교체:다음 방법 은 문자열 교체 에 매우 유연 합 니 다.
        //문자열 바 꾸 기
        //Pattern.CASE_INSENSITIVE 대소 문 자 는 민감 하지 않 습 니 다.
        Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher("java Java jAva ILoveJavA youHateJAVA adsdsfd");
        //저장 문자열
        StringBuffer  buf = new StringBuffer();
        //계수 기우 수
        int i  = 0;
        while(m.find()){
            i++;
            if(i%2 == 0){
                m.appendReplacement(buf, "java");
            }else{
                m.appendReplacement(buf, "JAVA");
            }
        }
        //이 말 을 추가 하지 않 으 면 문자열 adsdsfd 가 버 려 집 니 다.
        m.appendTail(buf);
        p(buf);
결과 인쇄:
JAVA java JAVA ILovejava youHateJAVA adsdsfd
패 킷
        //그룹 으로 나 누 기,()로 나 누 기
        Pattern p = Pattern.compile("( \\d{3,5})([a-z]{2 })");
        String s = "123aa-34345bb-234cc-00";
        Matcher m = p.matcher(s);
        p(m.groupCount());//2 조
        while(m.find()){
            p(m.group());//숫자 알파벳 다 있어 요.
            //p(m.group(1));//숫자 만 있어 요.
            //p(m.group(2));//알파벳 만 있어 요.
        }
정규 표현 식
자바 정규 표현 식 사용

좋은 웹페이지 즐겨찾기