Java 프로그래밍에서 정규 표현식의 기본 방법 사용하기

9448 단어 Java정규 표현식
모두가 알다시피 프로그램 개발에서 일치, 찾기, 교체, 판단 문자열이 필요한 상황에 직면하게 될 것이다. 이런 상황은 때때로 비교적 복잡하다. 만약에 순수한 인코딩 방식으로 해결한다면 종종 프로그래머의 시간과 정력을 낭비하게 될 것이다.따라서 정규 표현식을 배우고 사용하는 것이 이 모순을 해결하는 주요 수단이 되었다.
모두 알다시피 정규 표현식은 패턴 일치와 교체에 사용할 수 있는 규범이다. 정규 표현식은 일반적인 문자(예를 들어 문자 a에서 z까지)와 특수 문자(원 문자)로 구성된 문자 모델로 문자 주체를 찾을 때 일치할 문자열을 설명하는 데 사용된다.정규 표현식은 검색된 문자열과 일치하는 문자 모드를 템플릿으로 합니다.
jdk1.4에서java를 내놓은 이후.util.regex 패키지는 우리에게 좋은 JAVA 정규 표현식 응용 플랫폼을 제공합니다.
 
정규 표현식은 매우 난잡한 체계이기 때문에 저는 단지 입문의 개념을 예로 들었을 뿐입니다. 더 많은 것은 관련 서적을 참고하고 스스로 모색하십시오.
  • \백슬래시
  • \t 간격('\u0009')
  • 줄 바꿈('\u000A')
  • \r리턴('\u000D')
  • \d 숫자는 [0-9]
  • 와 같습니다.
  • \D 비숫자는 [^0-9]
  • 와 같습니다.
  • \s 공백 기호 [\t\x0B\f\r]
  • \S 비공백 기호 [^\t\x0B\f\r]
  • \w 단독 문자 [a-zA-Z_0-9]
  • \W 비단독 문자 [^a-zA-Z_0-9]
  • \f 페이지 바꾸기
  • \e Escape
  • \b단어의 경계
  • \B 단어가 아닌 경계
  • \G 이전 일치 종료
  • ^ 제한 시작
  • ^java 조건은 Java로 시작하는 문자로 제한됨
  • $가 제한 마무리
  • java$조건은 자바로 끝나는 문자로 제한
  • .조건 제한 이외의 개별 문자
  • java..조건은 자바로 제한된 후 줄 바꾸기를 제외한 임의의 두 문자
  • 특정 제한 조건 가입 "[]"
  • [a-z] 조건은 소문자 a to z 범위에서 한 문자로 제한됩니다
  • [A-Z] 조건은 대문자 A to Z 범위에서 한 문자로 제한됩니다
  • [a-zA-Z] 조건은 소문자 a to z 또는 대문자 A to Z 범위에서 한 문자로 제한됩니다
  • [0-9] 조건은 소문자 0 to 9 범위에서 문자
  • 로 제한됩니다.
  • [0-9a-z] 조건은 소문자 0 to 9 또는 a to z 범위에서 한 문자로 제한됩니다
  • [0-9[a-z]] 조건은 소문자 0 to 9 또는 a to z 범위에서 문자(교집합)
  • 로 제한됩니다.
  • []에 ^를 추가한 후 재제한 조건'[^]
  • [^a-z] 조건은 비소문자 atoz 범위에서 문자
  • 로 제한됨
  • [^A-Z] 조건은 대문자 A to Z 범위가 아닌 문자로 제한됩니다
  • [^a-zA-Z] 조건은 소문자 a to z 또는 대문자 A to Z 범위에서 한 문자로 제한됩니다
  • [^0-9] 비소문자 0 to 9 범위에서 문자
  • 로 제한
  • [^0-9a-z] 조건은 비소문자 0 to 9 또는 a to z 범위에서 한 문자로 제한됩니다
  • [^0-9[a-z]] 조건은 비소문자 0 to 9 또는 a to z 범위에서 문자(교집합)
  • 로 제한됨
    제한 조건이 특정 문자에 0번 이상 나타나면 "*"를 사용할 수 있습니다.
  • J* 0 이상 J
  • .*0 개 이상의 임의의 문자
  • J.*D J와 D 사이의 문자 수 0 개 이상
  • 제한 조건이 특정 문자로 1회 이상 나타나면 + 를 사용할 수 있습니다.
  • J+ 1개 이상 J
  • .+1 개 이상의 임의의 문자
  • J+D J와 D 사이에 1자 이상의 문자
  • 제한 조건이 특정 문자에 대해 0 또는 1회 이상 나타나면 "?"를 사용할 수 있습니다.
  • JA?J 또는 JA 출현
  • 지정된 횟수 문자가 연속으로 표시되도록 제한 "{a}"
  • J{2}     JJ
  • J{3}     JJJ
  • 문자 a개 이상, 그리고 "{a,}"
  • J{3,}     JJJ,JJJJ,JJJJJ,???(3회 이상 J 병존)
  • 문자 개 이상, b개 이하 "{a, b}"
  • J{3,5} JJJ 또는 JJJJ
  • 둘 중 하나를 "|"
  • J|A J 또는 A
  • Java|Hello Java 또는 Hello
  •  
    ()에서 조합 유형 지정
    예를 들어 index에서 사이의 데이터를 조회하면 (.+?)
    Pattern을 사용하고 있습니다.compile 함수 시 정규 표현식의 일치 동작을 제어하는 매개 변수를 추가할 수 있습니다.
    Pattern Pattern.compile(String regex, int flag)
    flag의 범위는 다음과 같습니다.
    Pattern.CANON_EQ는 두 문자의'정규 분해 (canonical decomposition)'가 완전히 같은 경우에만 일치한다고 인정합니다.예를 들어 이 로고를 사용하면 표현식'a\u030A'가'?'와 일치합니다.기본적으로'규범 상등성 (canonical equivalence)'을 고려하지 않습니다.
    Pattern.CASE_INSENSITIVE (?) 는 기본적으로 대소문자 불일치는 US-ASCII 문자 세트에만 적용됩니다.이 로고는 표현식으로 하여금 대소문자를 무시하고 일치하게 할 수 있다.유니코드 문자를 크기 불일치시키려면 UNICODE_케이스와 이 로고를 합치면 됩니다.
    Pattern.COMMENTS (?) 는 이 모드에서 일치할 때 (정규 표현식의) 공백 문자를 무시합니다. (역자 주: 표현식의 "\\s"가 아니라 표현식의 공백,tab, 리턴 등)메모는 # 에서 시작하여 이 행이 끝날 때까지 계속됩니다.내장형 플래그를 사용하여 Unix 행 모드를 활성화할 수 있습니다.
    Pattern.DOTALL(?s) 모드에서 표현식 "."한 줄을 나타내는 끝 문자를 포함하여 모든 문자를 일치시킬 수 있습니다.기본적으로 표현식'.'행의 끝 문자가 일치하지 않습니다.
    Pattern.MULTILINE
    (?)m) 이 모드에서'^'와'$'는 각각 한 줄의 시작과 끝을 일치합니다.또한'^'는 문자열의 시작과 일치하고,'$'도 문자열의 끝과 일치합니다.기본적으로 이 두 표현식은 문자열의 시작과 끝만 일치합니다.
    Pattern.UNICODE_CASE
    (?u) 이 모드에서 CASE_를 사용하면INSENSITIVE 로고는 유니코드 문자에 대한 대소문자 불일치를 표시합니다.기본적으로 대소문자가 민감하지 않은 일치는 US-ASCII 문자 세트에만 적용됩니다.
    Pattern.UNIX_LINES(?d)는 이 모드에서'한 줄의 중단으로 인식되고'.','^'와'$'와 일치합니다.
    공허한 개념을 버리고 다음은 몇 가지 간단한 Java 정규 용례를 쓰십시오.
    ◆ 예를 들어 문자열이 검증을 포함할 때
    
    // Java , 
     Pattern pattern = Pattern.compile("^Java.*");
     Matcher matcher = pattern.matcher("Java ");
     boolean b= matcher.matches();
     // , true, false
     System.out.println(b);
    
    
    ◆ 문자열을 여러 조건으로 분할할 때
    
    Pattern pattern = Pattern.compile("[, |]+");
    String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun");
    for (int i=0;i<strs.length;i++) {
      System.out.println(strs[i]);
    } 
    
    ◆ 문자 바꾸기(첫 문자)
    
    Pattern pattern = Pattern.compile(" ");
    Matcher matcher = pattern.matcher("  Hello World,  Hello World");
    // 
    System.out.println(matcher.replaceFirst("Java"));
    
    ◆ 문자 바꾸기(모두)
    
    Pattern pattern = Pattern.compile(" ");
    Matcher matcher = pattern.matcher("  Hello World,  Hello World");
    // 
    System.out.println(matcher.replaceAll("Java"));
    
    ◆ 문자 바꾸기(문자 바꾸기)
    
    Pattern pattern = Pattern.compile(" ");
    Matcher matcher = pattern.matcher("  Hello World,  Hello World ");
    StringBuffer sbr = new StringBuffer();
    while (matcher.find()) {
      matcher.appendReplacement(sbr, "Java");
    }
    matcher.appendTail(sbr);
    System.out.println(sbr.toString());
    
    ◆ 메일 주소 확인
    
    String str="[email protected]";
    Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(str);
    System.out.println(matcher.matches());
    
    
    ◆ html 표시 제거
    
    Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
    Matcher matcher = pattern.matcher("<a href=\"index.html\"> </a>");
    String string = matcher.replaceAll("");
    System.out.println(string);
    
    ◆ html에서 대응하는 조건 문자열 찾기
    
    Pattern pattern = Pattern.compile("href=\"(.+?)\"");
    Matcher matcher = pattern.matcher("<a href=\"index.html\"> </a>");
    if(matcher.find())
     System.out.println(matcher.group(1));
    }
    
    ◆ http://주소 캡처
    
    // url
    Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
    Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
    StringBuffer buffer = new StringBuffer();
    while(matcher.find()){       
      buffer.append(matcher.group());    
      buffer.append("\r
    "); System.out.println(buffer.toString()); }
           
    ◆ 지정된 텍스트 바꾸기 {}
    
    String str = "Java {0} -{1} ";
    String[][] object={new String[]{"\\{0\\}","1995"},new String[]{"\\{1\\}","2007"}};
    System.out.println(replace(str,object));
    
    public static String replace(final String sourceString,Object[] object) {
          String temp=sourceString;  
          for(int i=0;i<object.length;i++){
               String[] result=(String[])object[i];
            Pattern  pattern = Pattern.compile(result[0]);
            Matcher matcher = pattern.matcher(temp);
            temp=matcher.replaceAll(result[1]);
          }
          return temp;
    }
    
    
    ◆ 지정된 디렉토리 아래 파일을 정규 조건으로 조회
    
     // 
        private ArrayList files = new ArrayList();
        // 
        private String _path;
        // 
        private String _regexp;
        
        class MyFileFilter implements FileFilter {
    
           /**
            *  
            */
           public boolean accept(File file) {
            try {
             Pattern pattern = Pattern.compile(_regexp);
             Matcher match = pattern.matcher(file.getName());        
             return match.matches();
            } catch (Exception e) {
             return true;
            }
           }
          }
        
        /**
         *  
         * @param inputs
         */
        FilesAnalyze (String path,String regexp){
          getFileName(path,regexp);
        }
        
        /**
         *  files
         * @param input
         */
        private void getFileName(String path,String regexp) {
          // 
           _path=path;
           _regexp=regexp;
           File directory = new File(_path);
           File[] filesFile = directory.listFiles(new MyFileFilter());
           if (filesFile == null) return;
           for (int j = 0; j < filesFile.length; j++) {
            files.add(filesFile[j]);
           }
           return;
          }
      
        /**
         *  
         * @param out
         */
        public void print (PrintStream out) {
          Iterator elements = files.iterator();
          while (elements.hasNext()) {
            File file=(File) elements.next();
              out.println(file.getPath());  
          }
        }
    
        public static void output(String path,String regexp) {
    
          FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);
          fileGroup1.print(System.out);
        }
      
        public static void main (String[] args) {
          output("C:\\","[A-z|.]*");
        }
    
    

    좋은 웹페이지 즐겨찾기