2017-02-13 18 views
0

테스트를 검토하면서 소유욕이 실제로 str.split()에서 작동 함을 확인했습니다. 실행하면정규 표현식 : Possessive Quantifier의 역 추적

String str = "aaaaab"; 

if(str.matches("a*+b")) 
    System.out.println("I backtrack"); 
else 
    System.out.println("Nope."); 

, 이것은 I backtrack를 출력 : 그래서 나는 다음과 같은 코드를 썼습니다. 이것이 왜 혼란 스러운지에 대한 이유는 소유욕있는 수량 기호가 결코 되돌아 가지 않는다고 들었습니다. 그렇다면 a*+은 문자열에 b을 포기할 이유가 무엇입니까?

내가 원하는 건 소유욕 한정어가 언제 되돌아 왔는지에 대한 자세한 설명입니다.

+2

''a * +''가''b''를 소비하는 이유는 무엇입니까? 그것은 역 추적이 일어날 수있는 유일한 시나리오입니다. 그러나 그렇지 않습니다. – f1sh

+0

'. * + b' vs'. * b' (또는 좀 더 구체적으로 말하자면'[ab] * + b' 대'[ab] * b')로 시도하십시오 – Aaron

+0

링크 : http : // www.regular-expressions.info/possessive.html –

답변

2

귀하의 예에는 역 추적이 없습니다.

"어떤 숫자의 a 자"라고 말하고 있습니다. 따라서 엔진은 5 a 문자를 수집 한 다음 중지합니다. b을 찾으십시오.

그게 전부입니다.

역 추적은 을 입력 한 후 엔진을 "추적"해야 함을 의미합니다.; 예를 들어 here을 참조하십시오.

그 이상의 경우 : 패턴이 입력과 일치 할 때 if 조건이 사실을 반환합니다. 이것이 "되돌아 오는 것"이라는 결론은 정확하지 않습니다.

일치하는 항목이 있습니다. 아무리 엔진이 맞춰지기 위해 되돌아 가야하는지 (또는 안했는지) 다른 말로하면 : 당신의 작은 테스트는 당신에게 아무 것도 말하지 않습니다 (입력이 주어진 패턴과 일치하는지 만 알려줍니다; 마침표).