>  기사  >  类库下载  >  Java 정규식에서 Greedy Reluctant Possessive의 차이점

Java 정규식에서 Greedy Reluctant Possessive의 차이점

高洛峰
高洛峰원래의
2016-10-15 13:36:432041검색

Java 공식 문서 http://docs.Oracle.com/javase/7/docs/api/java/util/regex/Pattern.html에서 정규 표현식이 수량자를 나타내는 것을 볼 수 있습니다. 상징, 즉 탐욕, 꺼림, 소유. 그 의미는 다음과 같습니다.

Java 정규식에서 Greedy Reluctant Possessive의 차이점

욕심, 꺼림, 소유의 차이

예시

위의 표를 보면 , 우리는 세 수량자의 의미가 동일하다는 것을 알 수 있습니다(예를 들어 X?, X?? 및 X?+는 모두 한 번 또는 한 번이 아님을 의미함). 그러나 이들 사이에는 여전히 미묘한 차이가 있습니다. 먼저 예를 살펴보겠습니다.

1.Greedy

public static void testGreedy() {  
    Pattern p = Pattern.compile(".*foo");  
    String strText = "xfooxxxxxxfoo";  
    Matcher m = p.matcher(strText);  
    while (m.find()) {  
        System.out.println("matched form " + m.start() + " to " + m.end());  
    }  
}

결과:

form 0 ~ 13

2.Reluctant

public static void testReluctant() {  
    Pattern p = Pattern.compile(".*?foo");  
    String strText = "xfooxxxxxxfoo";  
    Matcher m = p.matcher(strText);  
    while (m.find()) {  
        System.out.println("matched form " + m.start() + " to " + m.end());  
    }  
}

결과:

형식 0~4 일치

형식 4~13 일치

소유형

public static void testPossessive() {  
    Pattern p = Pattern.compile(".*+foo");  
    String strText = "xfooxxxxxxfoo";  
    Matcher m = p.matcher(strText);  
    while (m.find()) {  
        System.out.println("matched form " + m.start() + " to " + m.end());  
    }  
}

결과:

//매칭 성공

원리 설명

매처가 입력 문자열을 처음 시도할 때 전체 일치 항목을 읽어야 하기 때문에 Greedy 수량자를 "greedy"라고 합니다. 첫 번째 일치 시도가 실패하면 문자별로 뒤에서 앞으로 돌아가서 일치가 성공하거나 돌아갈 문자가 없을 때까지 다시 일치를 시도합니다.

패턴 문자열: .*foo

검색 문자열: xfooxxxxxxfoo

결과: 0~13 형식 일치

비교 과정은 다음과 같습니다

Java 정규식에서 Greedy Reluctant Possessive의 차이점

Reluctant는 Greedy와 반대되는 방법을 사용합니다. 입력 문자열의 첫 번째(문자) 위치부터 시작하여 전체를 완료하려고 시도할 때까지 일치 검색에서 마지 못해 한 문자만 읽습니다. 끈.

패턴 문자열: .*foo

검색 문자열: xfooxxxxxxfoo

결과: 형식 0~4와 일치

형식 4~13과 일치

비교 과정은 다음과 같습니다

Java 정규식에서 Greedy Reluctant Possessive의 차이점

소유 수량자는 항상 전체 입력 문자열을 읽고 한 번(한 번만) 일치를 시도하여 성공적으로 일치합니다. . 그렇게 해도 전체 경기가 성공할 수 있습니다.

패턴 문자열: .*foo

검색 문자열: xfooxxxxxxfoo

결과:

//Unmatched 성공적으로

비교 프로세스 다음

Java 정규식에서 Greedy Reluctant Possessive의 차이점

참고 기사: http://docs.oracle.com/javase/tutorial/essential/regex/Quant.html

한 번 살펴보겠습니다. 예:

패턴 문자열: .+[0-9]

검색 문자열: abcd5aabb6

결과: 0~10 형식 일치

패턴 문자열: .+?[0-9]

검색 문자열: abcd5aabb6

결과: 형식 0~4 일치

패턴 문자열: .{1,9}+[0-9]

검색 문자열: abcd5aabb6

결과: 0~10 형식과 일치

패턴 문자열: .{1,10}+[0-9]

검색 문자열: abcd5aabb6

결과: 일치 실패


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.