다크호스 프로그래머 - 자바 기초 지식의 정규 표현 식

- 자바 교육, 안 드 로 이 드 교육, iOS 교육,. Net 교육, 당신 과 의 교 류 를 기대 합 니 다! -
1. 정규 표현 식 기초 (1), 정규 표현 식 은 무엇 입 니까?자바 의 유 닉 스 도구 모음 에 있 는 강력 하고 유연 한 텍스트 처리 도구 입 니 다.(2) 정규 표현 식 은 어떤 역할 을 합 니까?일부 특정한 기호 에 사용 하여 코드 조작 을 표시 하고 문자열 을 조작 합 니 다.문자열 에 대한 조작 을 간소화 할 수 있 습 니 다.(3) 주요 한 네 가지 구체 적 인 기능: 일치, 절단, 교체 와 일치 하 는 것 은 진짜 와 가짜 입 니 다.절단 은 규칙 이외 의 것 을 꺼 내 서 교체 하 는 것 이다. 교 체 된 것 을 꺼 내 서 가 져 오 는 것 은 규칙 이내 의 것 을 꺼 내 는 것 이다 (4). 흔히 볼 수 있 는 정규 표현 식 기호 이다. 설명: X 는 문자 X 또는 일치 하 는 규칙 을 나타 낸다.1. 문자 x 문자 x \ \ 역 사선 문자 \ t 탭 문자 ('\ u0009') 새 줄 (줄 바 꿈) 문자 ('\ u000A') \ r 리 턴 문자 ('\ u000D') \ f 페이지 바 꿈 문자 ('\ u000C') \ a 경보 (bell) 문자 ('\ u0007') 2, 문자 류 [bc] 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] (빼 기) 3, 미리 정 의 된 문자 류 입 니 다. 모든 문자 (줄 끝 문자 와 일치 하지 않 을 수도 있 습 니 다)\ d 숫자: [0 - 9] \ \ D 비 숫자: [^ 0 - 9] \ s 공백 문자: [\ t \ x0B \ \ f \ r] \ \ S 비 공백 문자: [^ \ s] \ w 단어 문자: [a - zA - Z 0 - 9] \ W 비 단어 문자: [^ \ \ w] 4, 경계 정합 기 ^ 줄 의 시작 $줄 의 끝 \ b 단어 경계 \ B 비 단어 경계 \ A 입력 의 시작 \ G 위의 일치 하 는 끝 \ Z 입력 의 끝,마지막 끝 문자 (있 으 면) \ z 입력 의 끝 5, Greedy 수량 단어 X 에 만 사용 합 니까?X, 한 번 또는 한 번 도 X * X, 0 번 또는 여러 번 X + X 가 없습니다. 한 번 또는 여러 번 X {n} X, 마침 n 번 X {n,} X, 적어도 n 번 X {n, m} X, 적어도 n 번 을 초과 하지 않 지만 m 번 6 을 초과 하지 않 습 니 다. 그룹 은 괄호 로 구 분 된 정규 표현 식 으로 그룹의 번호 에 따라 그룹 을 참조 할 수 있 습 니 다.그룹 번 호 는 0 으로 전체 표현 식 을 나타 내 고 그룹 번호 1 은 첫 번 째 괄호 로 묶 인 그룹 을 나타 내 며 이 를 유추 합 니 다.따라서 아래 표현 식: A (B (C) D 에는 세 개의 그룹 이 있 고, 그룹 0 은 ABCD 이 며, 그룹 1 은 BC 이 며, 그룹 2 는 C. 2. 정규 표현 식 기능 의 구체 적 인 응용 (1) 정규 표현 식 이 일치 하 는 응용 주의: ① \ d 는 숫자 [0 - 9] 를 표시 하지만 정규 표현 식 에 서 는 역 슬 래 쉬 "\" 는 "\ d" ② 와 같이 쌍 을 지어 나타 나 야 합 니 다. 일치: String matches 방법.규칙 으로 전체 문자열 을 일치 시 킵 니 다. 규칙 에 맞지 않 는 곳 이 있 으 면 일치 가 끝나 고 false 로 돌아 갑 니 다.예:
/*
      
      1:
           13xxx 15xxx 18xxxx

    */
    public static void checkTel()
    {
        String tel = "16900001111";
        String telReg = "1[358]\\d{9}";
        System.out.println(tel.matches(telReg));
    }
/*
  2:   "b23a23456789"      "[a-zA-Z]\\d*"  ,        
*/
    public static void demo()
    {
        String str = "b23a23456789";

        String reg = "[a-zA-Z]\\d*";

        boolean b= str.matches(reg);
        System.out.println(b);
    }
    /*
      3: QQ       
      :5~15  0    ,     
    */
    public static void checkQQ()
    {
        String qq = "123a454";

        String regex = "[1-9]\\d{4,14}";

        boolean flag = qq.matches(regex);
        if(flag)
            System.out.println(qq+"...is ok");
        else
            System.out.println(qq+"...    ");

    }

(2) 정규 표현 식 절단 의 응용 주의: 절단: String 클래스 의 String [] split (String regex) 방법의 주요 형식: String str = ";String reg = "; String [] arr = str. split (reg); 예:
/*
  1、                 
*/
class SplitDemo   
{  

    public static void main(String[] args)   
    {  
        String regex1="\\.";//  .   
        String regex2=" +";//    ,               
        String regex3="(.)\\1+";//                
        String[] arr="13.56.24.56.87".split(regex1);//  .    
        print(arr);  

        arr ="haha hrhr  jrkkc  ksdfs    dfs     fdsd ".split(regex2);//      
        print(arr);  

        arr="hhjdjajjjjdfhgggdfsdjj".split(regex3);//      
        print(arr);   
    }  

(3) 정규 표현 식 대체 적용 주의: 교체: String replace All (regex, str); regex 에 정의 그룹 이 있 으 면 두 번 째 매개 변수 에서 $기 호 를 통 해 정규 표현 식 에 있 는 기 존 그룹 을 가 져 올 수 있 습 니 다. 예:
String str = "wer138998000000ty1234564uiod234345675f";//           #。

replaceAllDemo(str,"\\d{5,}","#");

String str1 = "erkktyqqquizzzzzo";//      $.  //             。zzzz->z
replaceAllDemo(str1,"(.)\\1+","$1");

(4) 정규 표현 식 에서 가 져 온 응용 주의: 일치 하 는 것 은 문자열 의 규칙 에 맞 는 부분 을 꺼 내 는 것 입 니 다. 흔히 볼 수 있 는 네트워크 파충류 기술 입 니 다. 일치 하 는 형식 과 사고방식 으로: String str = "wo shi duan huang jun", String reg = ", 첫 번 째 단계: 정규 표현 식 을 대상 Pattern p = Pattern. copile (reg) 로 밀봉 합 니 다.; 두 번 째 단계: 정규 대상 을 조작 할 문자열 과 연결 시 켜 일치 하 는 대상 을 가 져 옵 니 다. Matcher m = p. Matcher (str), 세 번 째 단계: 연결 후 정규 일치 하 는 엔진 을 가 져 옵 니 다. 네 번 째 단계: 엔진 을 통 해 규칙 에 맞 는 하위 문자열 을 가 져 옵 니 다. 예 를 들 어 추출 합 니 다.
예:
*/
import java.util.regex.*;

class RegexDemo2 
{
    public static void main(String[] args) 
    {
        getDemo();
    }
    public static void getDemo()
    {
        String str = "ming tian jiu yao fang jia le ,da jia。";
        System.out.println(str);
        String reg = "\\b[a-z]{4}\\b";

        //        。
        Pattern p = Pattern.compile(reg);
        //                。       。
        Matcher m  = p.matcher(str);
       //boolean b = m.find();//          ,            。
      //System.out.println(b);
      //System.out.println(m.group());//         。
        while(m.find())  //            
        {
            System.out.println(m.group());
            System.out.println(m.start()+"...."+m.end());
            //start() end()                 
        }
    }
}

3. 정규 표현 식 깊이 1, 정규 표현 식 과 자바 I / O 는 지금까지 정규 표현 식 으로 정적 문자열 을 처리 하 는 예 를 보 았 습 니 다. 정규 표현 식 으로 파일 을 스 캔 하고 일치 하 는 문자열 을 찾 는 방법 을 보 여 드 리 겠 습 니 다. 유 닉 스 의 grep 에서 영감 을 받 아 JGrep. 자바 라 고 썼 습 니 다. 파일 이름과 일치 하 는 문자열 이 필요 합 니 다.정규 표현 식 을 사용 합 니 다. 이 정규 표현 식 의 일부 내용 과 소속 줄 의 줄 번 호 를 인쇄 합 니 다.
//: c12:JGrep.java
// A very simple version of the "grep" program.
// {Args: JGrep.java "//b[Ssct]//w+"}
import java.io.*;
import java.util.regex.*;
import java.util.*;
import com.bruceeckel.util.*;
public class JGrep {
&nbsnbsp;p = Pattern.compile(args[1]);
    // Iterate through the lines of the input file:
    ListIterator it = new TextFile(args[0]).listIterator();
    while(it.hasNext()) {
      Matcher m = p.matcher((String)it.next());
      while>    // Iterate through the lines of the input file:
    ListIterator it = new TextFile(args[0]).listIterator();
    while(it.hasNext()) {
      Matcher m = p.matcher((String)it.next());
      while(m.find())
        System.out.println(it.nextIndex() + ": " +
          m.group() + ": " + m.start());
    }
  }
} ///:~

2. Scanner 의 경계 문자 와 정규 표현 식 스 캔 사용
import java.util.Scanner;  
import java.util.regex.MatchResult;  
/** 
 * @author clydelou 
 *  
 */  
public class ScannerDelimiter {  
    /** 
     * @param args 
     */  
    static String threatData = "58.27.82.161@02/10/2005/n"  
            + "204.45.234.40@02/11/2005/n" + "58.27.82.161@02/11/2005/n"  
            + "58.27.82.161@02/12/2005/n" + "58.27.82.161@02/13/2005/n"  
            + "[next log section with different data format]";  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        Scanner scanner = new Scanner("12, 42,78,99,42");//      ,Scanner             ,                       
        scanner.useDelimiter("//s*,//s*");//     (             )       
        System.out.println(scanner.delimiter());//   delimiter()                Pattern    
        while (scanner.hasNextInt())  
            System.out.print(scanner.nextInt() + "/t");  
        System.out.println();  
        //            
        //  next()               ,                ,  match()           .  
        //   :             ,                ,             ,           .  
        scanner = new Scanner(threatData);  
        String pattern = "(//d+[.]//d+[.]+//d+[.]//d+)@"  
                + "(//d{2}///d{2}///d{4})";  

4. 정규 표현 식 이 파악 해 야 할 기본 예 (1) 작업 중 IP 주 소 를 정규 표현 식 으로 처리 하 는 경우 가 많 습 니 다.
/* 
  : 
 ip            。 
192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.301 

  : 
          ,          3   。 
1、           0    ,            3 。 
2、       3 。  ,   ip       3 。 

*/  
import java.util.*;  

class  IPSortTest  
{  
    public static void main(String[] args)   
    {  
        String ip="192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.301";  
        System.out.println(ip);  

        String regex="(\\d+)";  
        ip=ip.replaceAll(regex,"00$1");//          -------------  
        System.out.println(ip);  

        regex="0*(\\d{3})";  
        ip=ip.replaceAll(regex,"$1");//         
        System.out.println(ip);  

        regex=" ";  
        String[] arr=ip.split(regex);//       

        //    TreeSet  ,          
        TreeSet<String > ts=new TreeSet<String>();  
        for (String str : arr )  
        {  
            ts.add(str);//    
        }  

        regex="0*(\\d+)";//        0     
        for (String s : ts)  
        {  
            System.out.println(s.replaceAll(regex,"$1"));//        0     
        }  
    }  
}  

(2) 작업 중 메 일 주 소 를 검사 분석 합 니 다. 검 사 는 보통 정규 표현 식 의 일치 기능 으로 합 니 다. 일치 하 는 matches 방법 예 를 생각해 보 세 요.
/*
         
*/
package cn.dhj;

public class TestYouJian {
    public static void main(String[] args){
    String mail = "[email protected]";
    String reg = "[0-9a-zA-Z_]+@[0-9a-zA-Z]+(\\.[a-zA-Z]+)+";
    System.out.println(mail.matches(reg));
    }
}

좋은 웹페이지 즐겨찾기