"과 일치할 것이지만 실제 결과는 "aava "와 일치할 것입니다. 그리디 모드에 대해 자세히 알아보세요."/> "과 일치할 것이지만 실제 결과는 "aava "와 일치할 것입니다. 그리디 모드에 대해 자세히 알아보세요.">

 >  기사  >  Java  >  Java 프로그램에서 정규식의 그리디 패턴 매칭 분석 예

Java 프로그램에서 정규식의 그리디 패턴 매칭 분석 예

黄舟
黄舟원래의
2017-01-20 11:10:581596검색

그리디 모드는 최대 일치라고도 합니다. X?, /tr>abb", 예상한 결과는 "a34de1251f0d9fe1e645927f19a896e8"와 일치하지만 실제 결과는 "a34de1251f0d9fe1e645927f19a896e8aava 170cb496d79a113481d929c648d433ce". 자세히 살펴보겠습니다. 그리디 모드 사용.

그리디 모드(Greedy):

수량 표시는 별도로 지정하지 않는 한 기본적으로 그리디 모드로 설정됩니다. Greedy 모드 표현식은 일치하는 항목이 없을 때까지 계속해서 일치합니다. 표현식 일치 결과가 예상과 다르다면 이는 표현식이 처음 몇 문자만 일치할 것이라고 생각했지만 실제로는 탐욕스러운 패턴이므로 계속 일치하기 때문일 가능성이 높습니다.
탐욕스러운 것과 탐욕스럽지 않은 것, 그리고 ?는 탐욕스럽지 않다는 것을 의미합니다.

var s = '1023000'.match(/(\d+)(0*)/);
s
["1023000", "1023000", ""]
 
var s = '1023000'.match(/^(\d+)(0*)$/);
s
["1023000", "1023000", ""]
 
var s = '1023000'.match(/^(\d+?)(0*)$/);
s
["1023000", "1023", "000"]
 
var s = '1023000'.match(/(\d+?)(0*)/);
s
["10", "1", "0"]

java 38911927acc189ea30f784ff3ef9a7c8aspku.com/kaifa/zhengze/" target="_blank"> 정규식은 기본적으로 이 유형(.*)의 가장 긴 일치인 그리디 그리디 일치 모드를 사용합니다. 가장 짧은 일치가 필요한 경우 거부 일치 모드인 (.*?)로 변경됩니다.
원리 분석:
탐욕적 일치 모드인 경우 정규식 엔진은 문자열의 끝까지 일치를 수행합니다. 일치가 거짓인 경우
를 통해 맨 아래부터 일치하는 첫 번째 위치를 찾습니다. 역추적 일치 결과 반환
패턴이 거의 일치하지 않으면 정규식 엔진은 패턴 끝의 문자를 일치시킨 다음 한 단계 더 뒤로 가서 일치가 거짓임을 확인한 다음 다시 돌아갑니다. 반환된 가장 최근 일치 항목을 찾으려면 true 위치가 결과를 반환합니다.
코드 보기:
예제 1:

public void test51(){ 
  String str = "aaa\"bbb\"ccc\"ddd\"eee"; 
  System.out.println(str); 
  str = str.replaceAll("\"(.*)\"", "@"); 
  System.out.println(str); 
}

출력:

aaa"bbb"ccc"ddd"eee
aaa@eee

예제 2:

@Test 
 public void test52(){ 
   String str = "aaa\"bbb\"ccc\"ddd\"eee"; 
   System.out.println(str); 
     
   str = str.replaceAll("\"(.*?)\"", "@"); 
   System.out.println(str); 
     
 }

출력:

aaa"bbb"ccc"ddd"eee
aaa@ccc@eee

The 위는 Java 프로그램에서 정규식의 그리디 패턴 매칭 내용을 분석한 예입니다. 더 많은 관련 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!


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