나는 정규 표현식에 대한 이 훌륭한 튜토리얼 을 발견 했으며 "욕심 많음", "마지 못함"및 "포지티브"정량자가하는 일을 직관적으로 이해하지만 이해에 심각한 구멍이있는 것 같습니다.
특히 다음 예제에서
Enter your regex: .*foo // greedy quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending at index 13.
Enter your regex: .*?foo // reluctant quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfoo" starting at index 0 and ending at index 4.
I found the text "xxxxxxfoo" starting at index 4 and ending at index 13.
Enter your regex: .*+foo // possessive quantifier
Enter input string to search: xfooxxxxxxfoo
No match found.
설명은 언급 먹고 , 문자가되어 전체 입력 문자열을 소비 정규, 백 오프 , "foo는"의 제일 오른쪽으로 출현이되어 역류 등,
불행히도, 좋은 은유에도 불구하고, 나는 아직도 누가 무엇을 먹었는지 이해하지 못한다 ... 정규식 엔진이 어떻게 작동 하는지 설명하는 다른 튜토리얼을 알고 있습니까?
또는 다음 단락에서 다소 다른 문구로 설명 할 수 있다면 크게 감사하겠습니다.
첫 번째 예는 욕심 많은 수량 자. *를 사용하여 0 번 이상 "anything"을 찾은 다음 문자 "f" "o" "o"를 찾습니다. 수량자가 욕심 많기 때문에 식의. * 부분은 먼저 전체 입력 문자열을 사용합니다. 이 시점에서 마지막 세 글자 ( "f" "o" "o")가 이미 사용 되었기 때문에 전체 표현은 성공할 수 없습니다 ( 누군가? ). 따라서 매처 는 "foo"의 가장 오른쪽 어커런스가 역류 될 때까지 (오른쪽에서 왼쪽으로? ) 한 문자 씩 천천히 백 오프합니다 ( 이것은 무엇을 의미합니까? ).
그러나 두 번째 예는 꺼려하기 때문에 먼저 " 누가 "를 "아무것도" 소비 하지 않는 것으로 시작합니다 . "foo는"이 문자열의 시작 부분에 표시되지 않기 때문에, (제비 강제거야 누구 ? 제비) 0 4. 우리의 테스트 장치에서 첫 경기를 트리거 첫 글자 (에 "X")를 프로세스를 계속 입력 문자열이 소진 될 때까지. 4와 13에서 다른 경기를 찾습니다.
수량자가 소유하기 때문에 세 번째 예에서 일치하는 항목을 찾지 못했습니다. 이 경우 전체 입력 문자열은. * +에 의해 소비됩니다 ( 어떻게? ). 식 끝에 "foo"를 만족시키기 위해 아무것도 남겨 두지 않습니다. 역행하지 않고 모든 것을 빼앗고 싶을 때 소유격 한정자를 사용하십시오 (역행의 의미는 무엇입니까? ). 일치하는 항목을 즉시 찾을 수없는 경우 동등한 욕심 수량자를 능가합니다.
*
,+
하고?
있는 욕심. 최소 한정사 좋아*?
,+?
하고??
있습니다 게으른. 소유격 한정사 좋아*+
,++
하고?+
있습니다 끈적.