2012-03-19 2 views
2

{@x anything} 같은 항목을 a b c 1 225 {@x anything here1} test test {@x blabla} xyz test {@x any characters here}과 같이 입력해야합니다. 지금까지 \{(@x ([^\}].*\w+(\.*)\s*)*)\}을 시도, 그러나 이것은 내가 원하는 내가 좀 붙어 :(자바 - 정규식 - 그룹 분리

은 그래서 받아야 정말로되지 않습니다 :

anything here1

blabla

any characters here

+0

그래서 문제가 무엇입니까? 지금까지 뭐 해봤 어? – AlexR

+2

나는 '나는 지금까지 ....'라고 대답했다. –

답변

1

이 하나를 시도해보십시오 : "({@x ([^ {*)})"

String string = "a b c 1 225 {@x anything = here1} test test {@x bl** #abla} xyz test {@x any characters here}";   
    String regexp = "(\\{\\@x ([^\\{]*)\\})"; 
    Pattern pattern = Pattern.compile(regexp); 
    Matcher matcher = pattern.matcher(string); 
    while (matcher.find()){ 
     System.out.println(matcher.group(2)); 
    } 
내가 정규식을 조금 업데이트 한

+0

고마워, @yggdraa. –

+0

작동 했습니까? 난 그냥 일치하는 두 번째 그룹으로 편집 : – yggdraa

+0

그것은 잘 작동 :) – Sergiu

2

을 잘 해당 구조와 함께 제공되는 모든 그룹을 추출하려면 다음을 입력하십시오 :

{@x [a-zA-Z0-9 ]+} 

이 시점부터 요청 된 문자열의 헤더와 끝 부분 만 제거하면 필요한 출력이 있어야합니다.

편집 :

{@x [\w= ]+} 
+0

등호 ('=')와 같은 특수 문자가 필요할 수도있다. –

+0

나는 그가 여러 특수 문자 (등호 만이 아니라)를 가질 수 있다고 말한다. – Sergiu

1

또 다른 시도 : w \

String input="a b c 1 225 {@x anything here1} test test {@x blabla} xyz test {@x any characters here}"; 
    String pattern = "\\{@x [(\\w*)(\\s*)]*\\}"; 
    for(String s: input.split(pattern)){ 
     System.out.println(s); 
    } 

* = 단어 (AZ, AZ, 0-9); * = 0 이상

\ s * = 공백; * = 0 이상

[] * - 반복 그룹.

1

이 그것을 수행해야합니다

String string = "a b c 1 225 {@x anything here1} test test {@x blabla} xyz test {@x any characters here}"; 
String regexp = "\\{\\@x ([^\\}]*)\\}"; 
Pattern pattern = Pattern.compile(regexp); 
Matcher matcher = pattern.matcher(string); 
while (matcher.find()){ 
    System.out.println(matcher.group(1)); 
} 

\ {\ @ X - 매처 (Matchers) 당신은 시작한다.

은 ([^ \}]는 *) - 제외 anyting 일치 최종 곱슬 (})와 기 (1)

\}가 둔다 - 그러면 검색 둥근 단부

일치 당신의 그룹을 빼십시오.

1

당신이 사용할 수있는 패턴은 그래서 당신이 패턴에게 "문자 '{'와 '}'사이의 최소 일치"하려는 나에게 보인다 .*?에서

final String string = "a b c 1 225 {@x anything = here1} test test {@x bl** #abla} xyz test {@x any characters here}"; 
    final Pattern pattern = Pattern.compile("\\{@x (.*?)\\}"); // <-- pattern 
    final Matcher matcher = pattern.matcher(string); 
    while (matcher.find()) 
     System.out.println(matcher.group(1)); 

? 정확히하고있다 그.