간단한 문제처럼 보입니다. 캡쳐 그룹을 추출하고 선택적으로 구분 문자열로 그룹을 제한해야합니다.구분 기호가있는 정규 표현식 캡처 그룹
은 아래 예제에서는 'CD'의 단락 문자 문자열을 제공하고 모든 경우에 'AB'를 반환 것으로 예상 : 'AB', 'ABCD'를, 그리고 여기에 'ABCDEFG'
public static void main(String[] args) {
String expected = "ab"; // Could be more or less than two characters
String[] tests = {"ab", "abcd", "abcdefg"};
Pattern pattern = Pattern.compile("(.*)cd?.*");
for(String test : tests) {
Matcher match = pattern.matcher(test);
if(match.matches()) {
if(expected.equals(match.group(1)))
System.out.println("Capture Group for test: " + test + " - " + match.group(1));
else System.err.println("Expected " + expected + " but captured " + match.group(1));
} else System.err.println("No match for " + test);
}
}
출력은 다음과 같습니다 :
No match for ab
Capture Group for test: abcd - ab
Capture Group for test: abcdefg - ab
가 나는 내다가 작동 할 수 있다고 생각하지만 옵션 (즉, 0 개 이상의 인스턴스) 하나가 있다고 생각하지 않는 코드는
문제는 첫 번째'(. *)'비합법적 표현을 사용하더라도 정규식 - (? : cd)와'. *'- 그 밖의 모든 것은 선택 사항이므로 캡쳐 그룹은 전체 문자열과 일치가있을 것입니다. 정규식을보다 구체적으로 만들어야합니다. 또한 모든 테스트에 대해 Java 프로그램을 실행하는 대신 [이 웹 페이지] (http://www.regexplanet.com/simple/index.html)를 사용할 수 있습니다. –
나는 정규식을 더 구체적으로 만들 수있는 방법을 잘 모르겠다 ... 예상되는 문자열의 길이는 하나 이상의 문자가 될 수있다. 그렇지 않으면 길이 제한자가 작동 할 것이지만, 그 외에는 그렇지 않다. 그것을 제한하는 다른 방법을 알아라. –
'indexOf'와'substring'을 사용할 수 있습니까? – Melv