"과 일치할 것이지만 실제 결과는 "
그리디 모드는 최대 일치라고도 합니다. 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)를 참고하세요!