Java使用正则匹配捕捉
1 Pattern p = Pattern.compile("name="sign" value="(.*)"/>");
2 Pattern p = Pattern.compile("name="sign" value=*"(.?)**"/>");
第二个比第一个多了一个?号,请问其中区别是什么
伊谢尔伦2017-04-18 10:57:01
욕심 많은 사람과 욕심 없는 사람의 차이.
간단히 말하면, 욕심이 없다는 것은 나중에 또 다른 일치가 있든 없든 일치하면 멈추지 않는다는 뜻입니다.
天蓬老师2017-04-18 10:57:01
정규 표현식에 반복을 허용하는 한정자가 포함된 경우 일반적인 동작은 가능한 한 많은 문자를 일치시키는 것입니다(계속 전체 표현식이 일치하도록 허용함). 예를 들어 a.*b 표현식을 사용하면 a로 시작하고 b로 끝나는 가장 긴 문자열과 일치합니다. 이를 사용하여 aabab을 검색하면 전체 문자열 aabab과 일치합니다. 이를 탐욕적 일치라고 합니다.
때로는 지연 매칭, 즉 가능한 한 적은 수의 문자를 매칭해야 하는 경우도 있습니다. 위에 제공된 한정자는 뒤에 물음표 ?를 추가하여 지연 일치 패턴으로 변환할 수 있습니다. 이런 방식으로 .*?는 반복 횟수에 관계없이 일치하지만 최소한의 반복을 사용하여 전체 일치를 성공시키는 것을 의미합니다. 이제 예제의 게으른 버전을 살펴보세요.
a.*?b는 a로 시작하고 b로 끝나는 가장 짧은 문자열과 일치합니다. aabab에 적용하면 aab(첫번째~세번째 문자), ab(네번째~다섯번째 문자)와 일치하게 됩니다.
복사: http://deerchao.net/tutorials... 정규식 소개 30분, 탐욕스러운 부분과 게으른 부분
高洛峰2017-04-18 10:57:01
이 질문은 정규 표현식의 탐욕 모드와 게으른 모드(비탐욕 모드라고도 함)에 관한 것입니다
먼저 이 두 모드의 정의를 살펴보겠습니다
그리디 모드, 최대 매칭*
,+
,'{n,}',.*
모두 그리디 모드에 속합니다. 예
Lazy 모드는 성공적인 매칭을 전제로 가능한 한 적은 횟수로 매칭합니다.
그래도 위의 예는 다음과 같습니다.