2016-12-27 3 views
1

패턴과 일치 한 후에 모든 값을 쉼표 (,)로 구분하여 추출하고 싶습니다.문자열에서 쉼표로 구분 된 문자열을 추출하는 정규식

먼저 문자열을 정규식과 일치시키고 Matcher을 사용하여 값을 추출합니다.

Regex =\(([^)]+)\)은 아무런 문제없이 올바르게 다음 문자열과 일치합니다. 문자열 convert(datetime, 'Dec 27 2016 10:36:54', 116)는 원래 문자열에서 사용할 수있는 경우

('A', '36254632546', 0, 'Test, test1', NULL) 

그러나 수없는

일치합니다. 끝 부분에 $을 넣음으로써 마지막으로 )과 일치하는 것을 시도했지만 작동하지 않는 것 같습니다.

문자열은 정규식 ')'첫 번째 정차하기 때문이다('A', convert(datetime, 'Dec 27 2016 10:36:54', 116), 0, 'Test, test1', NULL)

+3

[자바에서 괄호 안에 중첩 된 문자열을 찾는 방법] (http://stackoverflow.com/questions/17759004/how-to-match-string-within-parentheses-nested-in-java)을 참조하십시오. 또한 [this snippet] (http://stackoverflow.com/a/37207892/3832970)이 도움이 될 수 있습니다. Java 정규 표현식이 재귀를 지원하지 않기 때문에 중첩 된 레벨 번호가 임의 인 경우 정규 표현식을 사용할 수 없습니다. –

+0

프로그래밍 언어를 파싱하는 것처럼 보입니다. 정규 표현식이 가능한 모든 입력에 * 일치 할 수 있습니까? – GhostCat

+0

이 https://regex101.com/에서 시도하십시오. – amicngh

답변

3

= 일치합니다.

정규식에서 말하는 내용은 '('다음 ')'다음에 ')'다음에 오는 모든 단어를 그룹화합니다. 그래서 끝이 없기 때문에 달러 기호를 넣어도 멈 춥니 다. 나머지 문자열은 없기 때문에 멈 춥니 다. 첫 번째 이후 ')'.

'+'기호는 연속 된 문자를 나타냅니다.

당신이 원하는 경우

\\(([^)]+\\)[^)]+)\\);

같은 것을 이야기하는 모든 문자열과 일치 할 수 있지만,이 프로그램의 로직과 관련이있다.

또한 많은 쉼표 그룹을 원할 경우 정규 표현식을 변경해야 그룹이 쉼표 그룹이됩니다.

관련 문제