나는자바 regexp에서 greedy 수량 한정자 X *를 사용할 때 X를 모두 유지하는 방법은 무엇입니까?
내가 괄호 사이의 각 단어를 유지하기 위해 그룹을 캡처 사용하려면 내가 예에서 "Hello <a1> sqjsjqk <b1,b2> dsjkfjkdsf <c1,c2,c3> ffsd"
같은 문자열 내부 < 사이에 혼수 상태로 구분 된 단어 목록의 일치>를 찾는 데 사용할 정규 표현식을 다음은
< (\w+) (?: ,(\w+) )* >
(공백 가독성을 위해 첨가되지만, 패턴의 일부가 아닌)
괄호 I가 없기 때문에 캡처 그룹 만들기 위해 (?: )
가 비 캡처 그룹을 만들기위한 것입니다 혼수 상태를 유지하고 싶다.
== Match ==
a1
null
== Match ==
b1
b2
== Match ==
c1
c3
그리고 여기가 내가 원하는 무엇인가 :이 생성되는 출력은
@Test
public void test() {
String patternString = "<(\\w+)(?:,(\\w+))*>";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher("Hello <a1> sqjsjqk <b1,b2> dsjkfjkdsf <c1,c2,c3> ffsd");
while(matcher.find()) {
System.out.println("== Match ==");
MatchResult matchResult = matcher.toMatchResult();
for(int i = 0; i < matchResult.groupCount(); i++) {
System.out.println(" " + matchResult.group(i + 1));
}
}
}
: 여기
내 테스트 코드이에서== Match ==
a1
== Match ==
b1
b2
== Match ==
c1
c2
c3
내가 이해가 내 표현의 캡쳐 그룹 수와 정확히 같은 수의 그룹이지만, 원하는 모든 것이 아니기 때문에 원하는 것은 아닙니다. \w+
로 인식되었다 그는 문자열은 하나의 정규식으로 내가 원하는 것을 얻을 수있는 기회가 있는가, 아니면 내가 아는 한 ... split(",")
, trim()
등으로
나는 "더 읽기 쉽다"라는 이유로 옵션 2를 택할 것입니다. 감사합니다 –
@ SamuelRossille 언급했다;) –