누구든지 설명 할 수 : 두 패턴이 아래 사용하는 이유자바 매처 그룹 : 차이의 이해 "(: X | Y)"와 "(: X?) | (: Y)"를
- 을 다른 결과를 주시겠습니까? (아래 답변 됨)
- 두 번째 예제는 그룹 수를 1로 지정하지만 시작은 이고 그룹 1의 끝은 -1이라고하는 이유는 무엇입니까? 다음과 같은 출력을 제공
public void testGroups() throws Exception
{
String TEST_STRING = "After Yes is group 1 End";
{
Pattern p;
Matcher m;
String pattern="(?:Yes|No)(.*)End";
p=Pattern.compile(pattern);
m=p.matcher(TEST_STRING);
boolean f=m.find();
int count=m.groupCount();
int start=m.start(1);
int end=m.end(1);
System.out.println("Pattern=" + pattern + "\t Found=" + f + " Group count=" + count +
" Start of group 1=" + start + " End of group 1=" + end);
}
{
Pattern p;
Matcher m;
String pattern="(?:Yes)|(?:No)(.*)End";
p=Pattern.compile(pattern);
m=p.matcher(TEST_STRING);
boolean f=m.find();
int count=m.groupCount();
int start=m.start(1);
int end=m.end(1);
System.out.println("Pattern=" + pattern + "\t Found=" + f + " Group count=" + count +
" Start of group 1=" + start + " End of group 1=" + end);
}
}
:
Pattern=(?:Yes|No)(.*)End Found=true Group count=1 Start of group 1=9 End of group 1=21
Pattern=(?:Yes)|(?:No)(.*)End Found=true Group count=1 Start of group 1=-1 End of group 1=-1
고맙습니다. 나는 여전히 그룹 수 (group count)가 1 인 이유를 이해하고 싶습니다. (1 권의 그룹 수는 하나의 번호가 매겨진 그룹이 발견되어 시작해야 함을 (문서 및 기타 실험을 통해) 이해했습니다. 1. – user358795
그룹 수는 그룹 대괄호를 계산하여 순전히 얻고 패턴에는 정확히 하나 ('. * ')가 있습니다. 이것은 그룹 1입니다. 특정 그룹이 주어진 입력과 일치하는지 여부는 해당 정의와 관련이 없습니다. 예를 들어 패턴 ""(예) | (아니오) "'에 두 그룹이 있습니다 ("(예) "는 그룹 1,"(아니오) "는 그룹 2). 주어진 입력. –
그래서 문서에 "이 정규 표현식 패턴의 캡처 그룹 수를 반환합니다."라고 쓰여 있습니다. 일치가없는 경우에도 표현식의 수를 의미합니까? 이 경우 find() 호출이 true를 반환하는 이유는 무엇입니까? 또는 다른 방법으로 말하자면, 어떤 그룹이 일치하는지 그리고 얼마나 많은 그룹이 일치 하는지를 결정하는 방법은 무엇입니까? – user358795