깊이 있 게 정규 표현 식 을 자바 에서 사용 합 니 다.

소개 하 다.
•정규 표현 식 은 일반적으로 문자열 일치,문자열 찾기 와 문자열 교체 에 사 용 됩 니 다.그 역할 을 얕 보지 마 십시오.작업 학습 에서 정규 표현 식 처리 문자열 을 유연 하 게 활용 하면 효율 을 크게 높 일 수 있 습 니 다.프로 그래 밍 의 즐거움 은 이렇게 간단 합 니 다.
•일치 하 는 규칙 을 한꺼번에 제시 하 는 것 은 두 려 울 수 있 습 니 다.다음은 정규 표현 식 의 사용 을 쉽게 설명 하 겠 습 니 다.
정규 표현 식 일치
•선행 코드

public class Demo1 {
 public static void main(String[] args) {
 //   abc       "...",   "."      
 //"..."      
 System.out.println("abc".matches("..."));

 System.out.println("abcd".matches("..."));
 }
}
//    
true
false
•String 클래스 에matches(String regex)방법 이 있 습 니 다.반환 값 은 불 형식 입 니 다.이 문자열 이 주어진 정규 표현 식 과 일치 하 는 지 알려 줍 니 다.
•이 예 에서 우리 가 제시 한 정규 표현 식 은.......................................................................................
자바 에서 정규 표현 식 에 대한 지원(다양한 언어 에 해당 하 는 구현)
•자바 util.regex 패키지 아래 정규 표현 식 에 사용 되 는 두 가지 종류 가 있 습 니 다.하 나 는 Matcher 류 이 고 다른 Pattern 입 니 다.자바 공식 문서 에서 이 두 가지 유형 에 대한 전형 적 인 용법 을 보 여 줍 니 다.코드 는 다음 과 같 습 니 다.

public class Demo1 {
 public static void main(String[] args) {
 //   abc       "...",   "."      
 //"..."      
 System.out.println("abc".matches("..."));

 System.out.println("abcd".matches("..."));
 }
}
//    
true
false
•정규 표현 식 뒤의 원 리 를 깊이 연구 하려 면 컴 파일 원리 에서 자동 동기 등 지식 과 관련 되 고 설명 을 하지 않 습 니 다.통속 적 이 고 이해 하기 쉬 우 므 로 이미지 있 는 언어 로 설명 합 니 다.
•Pattern 은 하나의 패턴 으로 이해 할 수 있 습 니 다.문자열 은 특정한 패턴 과 일치 해 야 합 니 다.예 를 들 어 Demo 2 에서 우리 가 정의 하 는 모델 은 길이 가 3 인 문자열 입 니 다.그 중에서 모든 문 자 는 a~z 중의 하나 여야 합 니 다.
•Pattern 대상 을 만 들 때 사용 하 는 것 은 Pattern 류 의 copile 방법 입 니 다.즉,우리 가 들 어 온 정규 표현 식 을 컴 파일 한 후에 모델 대상 을 얻 을 수 있 습 니 다.이 컴 파일 된 모델 대상 은 정규 표현 식 의 사용 효율 을 크게 향상 시 키 고 상수 로 서 여러 스 레 드 를 안전하게 병행 할 수 있 습 니 다.
•Matcher 는 패턴 이 특정한 문자열 과 일치 한 후에 발생 하 는 결과 로 이해 할 수 있 습 니 다.문자열 이 특정한 패턴 과 일치 하면 여러 가지 결과 가 발생 할 수 있 습 니 다.이것 은 뒤의 예 에서 설명 할 것 입 니 다.
•마지막 으로 m.matches()를 호출 할 때 전체 문자열 이 패턴 과 일치 하 는 결 과 를 되 돌려 줍 니 다.
•위의 세 줄 코드 는 한 줄 코드 로 간략화 할 수 있 습 니 다.System.out.println("abc".matches("[a-z]{3}"));•그러나 정규 표현 식 이 반복 적 으로 일치 해 야 한다 면 쓰기 효율 이 낮 습 니 다.
초보 적 인식.+*?
•소개 하기 전에 먼저 설명 해 야 할 것 은 정규 표현 식 의 구체 적 인 의 미 는 강하 게 외 울 필요 가 없다 는 것 이다.각 기호의 의 미 는 자바 공식 문서 의 Pattern 류 설명 이나 인터넷 에서 상세 한 정 의 를 내 렸 다.당연히 익 힐 수 있 으 면 더욱 좋다.

public class Demo3 {
 /**
 *            ,            
 * @param o
 */
 private static void p(Object o){
 System.out.println(o);
 }

 /**
 * . Any character (may or may not match line terminators),     
 * X? X, once or not at all      
 * X* X, zero or more times      
 * X+ X, one or more times      
 * X{n} X, exactly n times x  n 
 * X{n,} X, at least n times x    n 
 * X{n,m} X, at least n but not more than m times   n~m 
 * @param args
 */
 public static void main(String[] args) {
 p("a".matches("."));
 p("aa".matches("aa"));
 p("aaaa".matches("a*"));
 p("aaaa".matches("a+"));
 p("".matches("a*"));
 p("a".matches("a?"));

 // \d A digit: [0-9],     ,    java  "\"        \    ,     \\d
 p("2345".matches("\\d{2,5}"));
 // \\.    "."
 p("192.168.0.123".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
 // [0-2]    0~2      
 p("192".matches("[0-2][0-9][0-9]"));
 }
}
//    
//  true
범위.
•[]한 글자 의 범 위 를 설명 하 는 데 사용 되 는 예 입 니 다.

public class Demo4 {
 private static void p(Object o){
 System.out.println(o);
 }

 public static void main(String[] args) {
 //[abc] abc        
 p("a".matches("[abc]"));
 //[^abc]   abc     
 p("1".matches("[^abc]"));
 //a~z A~Z   ,           
 p("A".matches("[a-zA-Z]"));
 p("A".matches("[a-z|A-Z]"));
 p("A".matches("[a-z[A-Z]]"));
 //[A-Z&&[REQ]] A~Z     REQ       
 p("R".matches("[A-Z&&[REQ]]"));
 }
}
//    
모두 true
인식\s\w\d-숫자 와 자모의 정규 표현 을 소개 합 니 다.이것 은 프로 그래 밍 에서 가장 많이 사용 하 는 문자 입 니 다.
에 대하 여
•가장 이해 하기 어 려 운\를 소개 합 니 다.자바 의 문자열 에 특수 문 자 를 사용 하려 면 앞 에\를 붙 여 전 의 를 해 야 합 니 다.
•예 를 들 어 이 문자열 을 고려 해 보 세 요."선생님 께 서 큰 소리 로 말씀 하 셨 습 니 다."얘 들 아,빨리 숙제 내!"만약 에 우리 가 전의 문자 가 없다 면 시작 하 는 작은 따옴표 의 끝 은'여기,하지만 우리 문자열 에 작은 따옴표 가 필요 하기 때문에 전의 문 자 를 사용 해 야 합 니 다.
•전의 문 자 를 사용 한 문자열 은"선생님 께 서 큰 소리 로 말씀 하 셨 습 니 다."학생 여러분,빨리 숙제 를 내세 요!\",이렇게 해야만 우리 의 원 의 를 정확하게 식별 할 수 있다.
•마찬가지 로 우리 가 문자열 에\를 사용 하려 면 앞 에\를 추가 해 야 하기 때문에 문자열 에"\\"라 고 표시 합 니 다.
•어떻게 정규 표현 식 에 일치 하 는 것 을 표시 합 니까?정 답 은"\\\\"입 니 다.
•우 리 는 나 누 어 생각 합 니 다:정규 식 에 서 는\\똑 같이 전의 가 필요 하기 때문에 앞의\\는 정규 표현 식 의 전의 문 자 를 표시 합 니 다\,뒤의\\는 정규 표현 식 에서\자 체 를 표시 합 니 다.정규 표현 식 에 서 는\를 표시 합 니 다.
•약간 꼬 인 느낌 이 들 면 아래 코드 를 보 세 요.

public class Demo5 {
 private static void p(Object o){
 System.out.println(o);
 }

 public static void main(String[] args) {
 /**
 * \d A digit: [0-9]   
 * \D A non-digit: [^0-9]    
 * \s A whitespace character: [ \t
\x0B\f\r] * \S A non-whitespace character: [^\s] * \w A word character: [a-zA-Z_0-9] * \W A non-word character: [^\w] */ // \\s{4} 4 p("
\r\t".matches("\\s{4}")); // \\S p("a".matches("\\S")); // \\w{3} p("a_8".matches("\\w{3}")); p("abc888&^%".matches("[a-z]{1,3}\\d+[%^&*]+")); // \ p("\\".matches("\\\\")); } } //
모두 true
경계 처리
•^괄호 안에 반대 의 미 를 표시 합 니 다[^].괄호 안에 없 으 면 문자열 의 시작 을 표시 합 니 다.

public class Demo6 {
 private static void p(Object o){
 System.out.println(o);
 }

 public static void main(String[] args) {
 /**
 * ^ The beginning of a line         
 * $ The end of a line       
 * \b A word boundary        ,      ,     
 */
 p("hello sir".matches("^h.*"));
 p("hello sir".matches(".*r$"));
 p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));
 p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));
 }
}
연습:공백 줄 과 이메일 주소 일치
•글 한 편 을 받 으 면 몇 개의 공백 줄 이 있 는 지 어떻게 판단 합 니까?정규 표현 식 으로 편리 하 게 일치 할 수 있 습 니 다.빈 줄 에 빈 칸,탭 문자 등 이 포 함 될 수 있 습 니 다.
p(" ".matches("^[\\s&&[^]]*\$"));
•설명:^[\\\s&&[^]]*빈 칸 기호 이지 만 줄 바 꿈 문자 가 아 닙 니 다.\$마지막 으로 줄 바 꿈 문자 로 끝 납 니 다.
•다음은 일치 하 는 메 일 입 니 다.
p(" [email protected]".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w ]+"));
•설명:[\\\w[.-]+하나 이상 의 숫자 자모 로 밑줄 을 긋 거나-구성,@다음은@기호,그 다음 에 똑 같이[\\w[.-]+,그 다음 에\\\.일치 합 니 다.마지막 으로 똑 같이[\\w]+입 니 다.
Matcher 클래스 의 matches(),find(),lookingAt()
•matches()방법 은 전체 문자열 을 템 플 릿 과 일치 시 킵 니 다.
•find()는 현재 위치 부터 일치 합 니 다.문자열 을 입력 한 후 find()를 먼저 진행 하면 현재 위 치 는 문자열 의 시작 입 니 다.현재 위치 에 대한 구체 적 인 분석 은 아래 코드 예제 를 볼 수 있 습 니 다.
•lookingAt()방법 은 문자열 의 시작 부분 에서 일치 합 니 다.

public class Demo8 {
 private static void p(Object o){
 System.out.println(o);
 }

 public static void main(String[] args) {
 Pattern pattern = Pattern.compile("\\d{3,5}");
 String s = "123-34345-234-00";
 Matcher m = pattern.matcher(s);

 //   matches(),         .
 p(m.matches());
 //   false,      3~5     -     

 //    find(),    reset()                
 m.reset();
 p(m.find());//true   123  
 p(m.find());//true   34345  
 p(m.find());//true   234  
 p(m.find());//false   00  

 //        matches()  reset(),          
 m.reset();//   
 p(m.matches());//false          ,       -
 p(m.find());// true   34345  
 p(m.find());// true   234  
 p(m.find());// false   00  
 p(m.find());// false       ,   

 //  lookingAt(),      
 p(m.lookingAt());//true   123,   
 }
}
Matcher 클래스 의 start()와 end()
•한 번 일치 하 는 데 성공 하면 start()는 시작 과 일치 하 는 위 치 를 되 돌려 주 는 데 사 용 됩 니 다.end()는 끝 문자 와 일치 하 는 다음 위 치 를 되 돌려 주 는 데 사 용 됩 니 다.

public class Demo9 {
 private static void p(Object o){
 System.out.println(o);
 }

 public static void main(String[] args) {
 Pattern pattern = Pattern.compile("\\d{3,5}");
 String s = "123-34345-234-00";
 Matcher m = pattern.matcher(s);

 p(m.find());//true   123  
 p("start: " + m.start() + " - end:" + m.end());
 p(m.find());//true   34345  
 p("start: " + m.start() + " - end:" + m.end());
 p(m.find());//true   234  
 p("start: " + m.start() + " - end:" + m.end());
 p(m.find());//false   00  
 try {
 p("start: " + m.start() + " - end:" + m.end());
 }catch (Exception e){
 System.out.println("   ...");
 }
 p(m.lookingAt());
 p("start: " + m.start() + " - end:" + m.end());
 }
}
//    
true
start: 0 - end:3
true
start: 4 - end:9
true
start: 10 - end:13
false
   ...
true
start: 0 - end:3
대체 문자열
•문자열 을 바 꾸 려 면 먼저 바 뀐 문자열 을 찾 아야 합 니 다.Matcher 클래스 의 방법 group()을 새로 소개 합 니 다.일치 하 는 문자열 을 되 돌려 줍 니 다.
•다음 예 를 들 어 문자열 의 자 바 를 대문자 로 변환 합 니 다.

public class Demo10 {
 private static void p(Object o){
 System.out.println(o);
 }

 public static void main(String[] args) {
 Pattern p = Pattern.compile("java");
 Matcher m = p.matcher("java Java JAVA JAva I love Java and you");
 p(m.replaceAll("JAVA"));//replaceAll()              
 }
}
//    
JAVA Java JAVA JAva I love Java and you
업그레이드:대소 문자 구분 없 이 문자열 찾기 및 바 꾸 기

•              ,                    
public static void main(String[] args) {
 Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);//          
 Matcher m = p.matcher("java Java JAVA JAva I love Java and you");
 p(m.replaceAll("JAVA"));
}
//    
JAVA JAVA JAVA JAVA I love JAVA and you
재 업그레이드:대소 문 자 를 구분 하지 않 고 찾 은 지정 한 문자열 을 바 꿉 니 다.
•여기 서 찾 은 기수 문자열 을 대문자 로 바 꾸 고,짝수 문자열 을 소문 자로 바 꾸 는 것 을 보 여 줍 니 다.
•Matcher 클래스 의 강력 한 방법 인 append Replacement(StringBuffer sb,String replacement)을 도입 합 니 다.
StringBuffer 에서 문자열 연결 을 진행 합 니 다.

public static void main(String[] args) {
 Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
 Matcher m = p.matcher("java Java JAVA JAva I love Java and you ?");
 StringBuffer sb = new StringBuffer();
 int index = 1;
 while(m.find()){
 //m.appendReplacement(sb, (index++ & 1) == 0 ? "java" : "JAVA");        
 if((index & 1) == 0){//  
 m.appendReplacement(sb, "java");
 }else{
 m.appendReplacement(sb, "JAVA");
 }
 index++;
 }
 m.appendTail(sb);//         
 p(sb);
}
//    
JAVA java JAVA java I love JAVA and you ?
패 킷
•먼저 한 문제 에서 도입 하여 아래 코드 를 보 세 요.

public static void main(String[] args) {
 Pattern p = Pattern.compile("\\d{3,5}[a-z]{2}");
 String s = "123aa-5423zx-642oi-00";
 Matcher m = p.matcher(s);
 while(m.find()){
 p(m.group());
 }
}
//    
123aa
5423zx
642oi
•정규 표현 식"\\d{3,5}[a-z]{2}"은 3~5 개의 숫자 가 두 자 모 를 따라 간 다음 일치 하 는 문자열 을 출력 합 니 다.
•일치 하 는 문자열 의 숫자 를 인쇄 하려 면 어떻게 조작 합 니까?
•우선 일치 하 는 문자열 을 다시 일치 시 킬 생각 을 할 수 있 습 니 다.그러나 너무 번 거 롭 습 니 다.그룹 체 제 는 정규 표현 식 에서 그룹 을 나 누 는 데 도움 을 줄 수 있 습 니 다.
•()로 그룹 을 나 누 도록 규정 하고 있 습 니 다.여기 서 알파벳 과 숫자 를 각각 한 그룹 으로 나 눕 니 다."\\d{3,5})([a-z]{2}"
•그리고 m.group(int group)방법 을 호출 할 때 그룹 번 호 를 입력 하면 됩 니 다.
•그룹 번 호 는 0 부터 시작 합 니 다.0 조 는 전체 정규 표현 식 을 대표 합 니 다.0 이후 정규 표현 식 에서 왼쪽 에서 오른쪽 까지 왼쪽 괄호 마다 한 그룹 에 대응 합 니 다.이 표현 식 에서 첫 번 째 그룹 은 숫자 이 고 두 번 째 그룹 은 알파벳 입 니 다.

public static void main(String[] args) {
 Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");//      3~5         
 String s = "123aa-5423zx-642oi-00";
 Matcher m = p.matcher(s);
 while(m.find()){
 p(m.group(1));
 }
}
//    
123
5423
642
실전 1:웹 페이지 의 이메일 주소 잡기(파충류)
•우리 가 가지 고 있 는 양질 의 자원 이 있다 고 가정 하여 네티즌 에 게 공유 하려 고 합 니 다.그래서 카페 에 메 일 을 남 겨 자원 을 보 내 는 댓 글 을 올 렸 습 니 다.네티즌 들 의 열정 이 높 아 100 개 에 가 까 운 메 일 을 남 겼 을 줄 은 몰 랐 습 니 다.그러나 하나씩 복사 해서 보 내 는 것 은 너무 피곤 합 니 다.우 리 는 절차 로 실현 하 는 것 을 고려 합 니 다.
•메 일 을 보 내 는 부분 을 펼 치지 않 고 배 운 정규 표현 식 을 사용 하여 웹 페이지 에서 모든 메 일 주 소 를 캡 처 합 니 다.
•먼저 게시 물의 html 코드 를 가 져 와 아무 거나 찾 았 습 니 다.점프 를 누 르 고 브 라 우 저 에서 오른쪽 단 추 를 누 르 면 html 파일 을 저장 합 니 다.
•다음 코드 보기:

public class Demo12 {
 public static void main(String[] args) {
 BufferedReader br = null;
 try {
 br = new BufferedReader(new FileReader("C:\\emailTest.html"));
 String line = "";
 while((line = br.readLine()) != null){//        
 parse(line);//     email  
 }
 } catch (FileNotFoundException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 }finally {
 if(br != null){
 try {
  br.close();
  br = null;
 } catch (IOException e) {
  e.printStackTrace();
 }
 }
 }
 }

 private static void parse(String line){
 Pattern p = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
 Matcher m = p.matcher(line);
 while(m.find()){
 System.out.println(m.group());
 }
 }
}
//    
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
...
실전 2:코드 통계 애플 릿
•마지막 실전 사례:한 항목 에 모두 몇 줄 의 코드 가 있 는 지,몇 줄 의 주석,몇 개의 빈 줄 이 있 는 지 통계 해 보 세 요.자신 이 했 던 항목 을 통계 해 보 세 요.자신 도 모 르 는 사이 에 수천 줄 의 코드 를 쓴 사람 이라는 것 을 알 게 되 었 습 니 다.
•github 에서 하나의 항목 을 골 랐 습 니 다.순수한 자바 가 쓴 작은 항목 입 니 다.통 계 를 쉽게 할 수 있 습 니 다.클릭 하여 뛰 기
•다음은 구체 적 인 코드 입 니 다.빈 줄 을 판단 하 는 데 정규 표현 식 을 사용 한 것 을 제외 하고 코드 줄 과 주석 줄 을 판단 하 는 데 String 류 api 를 사 용 했 습 니 다.

public class Demo13 {
 private static long codeLines = 0;
 private static long commentLines = 0;
 private static long whiteLines = 0;
 private static String filePath = "C:\\TankOnline";
 public static void main(String[] args) {
 process(filePath);
 System.out.println("codeLines : " + codeLines);
 System.out.println("commentLines : " + commentLines);
 System.out.println("whiteLines : " + whiteLines);
 }
 /**
 *       
 * @param pathStr
 */
 public static void process(String pathStr){
 File file = new File(pathStr);
 if(file.isDirectory()){//         
 File[] fileList = file.listFiles();
 for(File f : fileList){
 String fPath = f.getAbsolutePath();
 process(fPath);
 }
 }else if(file.isFile()){//         .java  
 if(file.getName().matches(".*\\.java$")){
 parse(file);
 }
 }
 }
 private static void parse(File file) {
 BufferedReader br = null;
 try {
 br = new BufferedReader(new FileReader(file));
 String line = "";
 while((line = br.readLine()) != null){
 line = line.trim();//         
 if(line.matches("^[\\s&&[^\
]]*$")){//
, br.readLine()
whiteLines++; }else if(line.startsWith("/*") || line.startsWith("*") || line.endsWith("*/")){ commentLines++; }else if(line.startsWith("//") || line.contains("//")){ commentLines++; }else{ if(line.startsWith("import") || line.startsWith("package")){// continue; } codeLines++; } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(null != br){ try { br.close(); br = null; } catch (IOException e) { e.printStackTrace(); } } } } } // codeLines : 1139 commentLines : 124 whiteLines : 172
탐욕 모드 와 비 탐욕 모드
•두 가지 실전 을 거 친 후에 여러분 이 정규 표현 식 의 기본 적 인 사용 을 익 혔 다 고 믿 습 니 다.다음은 탐욕 모델 과 비 탐욕 모델 을 소개 합 니 다.공식 api 를 보면 Pattern 류 에 다음 과 같은 정의 가 있 음 을 알 수 있 습 니 다.
Greedy quantifiers 탐욕 모드
X?  X, once or not at all
X*  X, zero or more times
X+  X, one or more times
X{n}    X, exactly n times
X{n,}   X, at least n times
X{n,m}  X, at least n but not more than m times
Reluctant quantifiers 비 탐욕 모드(억지로,내 키 지 않 는)
X?? X, once or not at all
X*? X, zero or more times
X+? X, one or more times
X{n}?   X, exactly n times
X{n,}?  X, at least n times
X{n,m}? X, at least n but not more than m times 
Possessive quantifiers  독점 모드
X?+ X, once or not at all
X*+ X, zero or more times
X++ X, one or more times
X{n}+   X, exactly n times
X{n,}+  X, at least n times
X{n,m}+ X, at least n but not more than m times
•이 세 가지 모델 은 똑 같은 뜻 을 표현 합 니 다.앞의 설명 에서 우리 가 모두 사용 하 는 것 은 탐욕 모델 입 니 다.그러면 다른 두 가지 모델 의 쓰기 방법 은 어떤 차이 가 있 습 니까?아래 의 코드 예 시 를 통 해 설명 하 겠 습 니 다.

public static void main(String[] args) {
 Pattern p = Pattern.compile(".{3,10}[0-9]");
 String s = "aaaa5bbbb6";//10   
 Matcher m = p.matcher(s);
 if(m.find()){
 System.out.println(m.start() + " - " + m.end());
 }else {
 System.out.println("not match!");
 }
}
//    
0 - 10
•정규 표현 식 은 3~10 개의 문자 에 숫자 를 추가 한 다 는 뜻 입 니 다.탐욕 모드 에서 일치 할 때 시스템 은 10 개의 문 자 를 먼저 삼 킵 니 다.이때 마지막 숫자 를 검사 할 때 문자 가 없 는 것 을 발견 하고 한 문 자 를 뱉 습 니 다.다시 숫자 와 일치 하여 0-10 을 얻 습 니 다.
•다음은 비 탐욕 모드 프 리 젠 테 이 션(억지로,내 키 지 않 는)

public static void main(String[] args) {
 Pattern p = Pattern.compile(".{3,10}?[0-9]");//     ?
 String s = "aaaa5bbbb6";
 Matcher m = p.matcher(s);
 if(m.find()){
 System.out.println(m.start() + " - " + m.end());
 }else {
 System.out.println("not match!");
 }
}
//    
0 - 5
•비 탐욕 모드 에서 먼저 3 개(최소 3 개)만 삼 킨 다음 에 뒤의 숫자 인지 아 닌 지 를 판단 합 니 다.결 과 는 아 닙 니 다.한 문 자 를 뒤로 삼 키 고 뒤의 숫자 여 부 를 계속 판단 합 니 다.결 과 는'출력 0-5'입 니 다.
•마지막 으로 독점 모델 을 보 여 주 는 것 은 효율 을 추구 하 는 상황 에서 만 이렇게 하 는 것 이 적 습 니 다.

public static void main(String[] args) {
 Pattern p = Pattern.compile(".{3,10}+[0-9]");//   +
 String s = "aaaa5bbbb6";
 Matcher m = p.matcher(s);
 if(m.find()){
 System.out.println(m.start() + " - " + m.end());
 }else {
 System.out.println("not match!");
 }
}
//    
not match!
•독점 모드 는 10 자 를 한꺼번에 삼 키 고 그 다음 에 숫자 인지 아 닌 지 를 판단 합 니 다.일치 하 든 성공 하 든 계속 삼 키 거나 토 하지 않 습 니 다.
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 정규 표현 식 이 자바 에서 사용 되 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

좋은 웹페이지 즐겨찾기