정규 표현 식 의 탐욕 일치 와 탐욕 일치
By default, pattern matching is greedy, which means that the matcher returns the longest match possible. For example, applying the pattern
A.*c
to AbcAbcA
matches AbcAbc
rather than the shorter Abc
. To do nongreedy matching, a question mark must be added to the quantifier. For example, the pattern A.*?c
will find the shortest match possible. // Greedy quantifiers
String match = find("A.*c","AbcAbc"); // AbcAbc
// Nongreedy quantifiers
match = find("A.*?c","AbcAbc"); // Abc
관 하 다
http://topic.csdn.net/u/20100902/16/9a8f2249-86f2-4f80-b5f5-dbf8769ba674.html
탐욕
전체 문자열 이 일치 하 는 지 확인 하 세 요.일치 하 는 것 을 발견 하지 못 하면 마지막 문자열 의 마지막 문 자 를 지우 고 다시 시도 합 니 다.일치 하 는 것 을 발견 하지 못 했다 면, 마지막 문자열 을 다시 지 웁 니 다. 이 과정 은 일치 하거나 문자열 이 남 아 있 지 않 을 때 까지 반복 합 니 다.간단 한 양 사 는 모두 탐욕 양사 이다.
타성 양사:
문자열 의 첫 번 째 자모 가 일치 하 는 지 먼저 보 세 요. 한 글자 만 으로 는 부족 하 다 면 다음 문 자 를 읽 고 두 문 자 를 구성 하 는 문자열 입 니 다.일치 하 는 것 을 발견 하지 못 하면 타성 양 어 는 일치 하 는 것 을 발견 하거나 전체 문자열 이 일치 하지 않 을 때 까지 문자열 에 문 자 를 계속 추가 합 니 다.타성 양사 와 탐 욕 스 러 운 양사 의 작업 방식 은 정반 대 이다.
지배 양사:
전체 문자열 과 일치 하 는 것 만 시도 합 니 다.전체 문자열 이 일치 하지 않 으 면 더 이상 시도 하지 않 습 니 다.
탐욕 타성 양사 지배 양사 묘사 하 다. ------------------------------------------------------------------------------------- ? ?? ?+ 0 회 또는 1 회 나타 날 수 있 으 나 많아야 1 회 나타 날 수 있다. * *? *+ 임 의적 으로 나타 날 수도 있 고 나타 나 지 않 을 수도 있다. + +? ++ 한 번 또는 여러 번 나타 나 지만 적어도 한 번 은 나타난다. {n} {n}? {n}+ 반드시 n 회 출현 {n,m} {n,m}? {n,m}+ 적어도 n 번 은 나타 나 지만, 많 게 는 m 번 을 초과 해 서 는 안 된다. {n,} {n,}? {n,}+ 임의의 번 이 나타 날 수 있 지만, 적어도 n 번 은 나타 날 수 있다.
예 를 들 어 우 리 는 문자열 abbbaabbbaaabbb 1234 에서 abbb, aabbb, aaabbb 의 일치 성 을 얻 으 려 고 합 니 다.
1. 탐욕
1 var regexp = /.*bbb/g;2 var a = str.match(regexp);3 alert(a.length); //output:14 alert(a[0]); //output:abbbaabbbaaabbb
탐욕 양사 의 작업 과정 은 이렇게 표시 할 수 있다. a)abbbaabbbaaabbb1234 b)abbbaabbbaaabbb123 c)abbbaabbbaaabbb12 d)abbbaabbbaaabbb1 e)abbbaabbbaaabbb //true 탐 욕 스 러 운 양 어 는 한 번 의 매 칭 을 얻 은 후에 일 을 멈 추 는 것 을 볼 수 있다. 비록 우 리 는 'g' (전체 매 칭) 을 추 가 했 지만.
2. 타성 양사
1 var regexp = /.*?bbb/g;2 var a = str.match(regexp);3 alert(a.length); //output:34 alert(a[0]); //output:abbb5 alert(a[1]); //output:aabbb6 alert(a[2]); //output:aaabbb
타성 양사 의 작업 과정 은 이렇게 표시 할 수 있다. a)a b)ab c)abb d) abbb / / 결 과 를 저장 하고 다음 위치 에서 다시 시작 합 니 다. e)a f)aa g)aab h)aabb j) aabbb / / 결 과 를 저장 하고 다음 위치 에서 다시 시작 합 니 다. e)a e)aa e)aaa e)aaab e)aaabb e)aaabbb //결 과 를 저장 하고 다음 위치 에서 다시 시작 합 니 다.
JS 는 지 배 량 사 를 지원 하지 않 기 때문에 지 배 량 사 는 JAVA 로 만 보 여 드릴 수 있 습 니 다.
1 String string = "abbbaabbbaaabbb1234";2 Pattern p = Pattern.compile(".*+bbb");3 Matcher m = p.matcher(string);4 System.out.println(m.find()); //output:false5
지배 양사 가 일률적으로 일치 하 는 방식 을 사용 하기 때문이다. 예 를 들 어:
a)abbbaabbbaaabbb1234 //false
http://java.chinaitlab.com/base/773980.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.