2016-09-21 5 views
2

나는 다음과 같은 정규 표현식을 사용하여 문자열에서 특별한 순서를 추출하기 위해 노력하고 있습니다 : 문자열이 그들 사이의 텍스트 ()가 포함되어있는 경우자바 : 정규식이 일치하지 않습니까?

[(].*[)] 

내 패턴은 일치해야합니다.

은 어떻게 든, 나는 나는 새로운 PatternPattern#compile(myString)를 사용하고 내가 regexr.com에 그것을 시도하고이 일을하더라도, 그것은 아무것도 찾을 수없는 Matcher matcher = myPattern.matcher();를 사용하여 문자열과 일치 만들 수 있습니다.

Pattern 다른 클래스의 static final 패턴 객체 (I 직접 Pattern#compile(myString)을 사용하는 것입니다

예 문자열 일치 :..

save (xxx,yyy) 
+0

코드 부분을 포함해야합니다. –

+0

** 일치 ** ** 추출 ** – TheLostMind

+0

중 무엇을 찾으십니까? - _matches() _ 또는 _find() _를 사용하고 있습니까? – Alexander

답변

1

여기 가능성에 문제가 정량 당신 이후

욕심 많은 *을 사용하여 어떤 문자에 대해서도 .의 조합을 사용하면 .이 (는) 클로 인과 일치하므로 일치가 올바르게 구분되지 않습니다. g ).

꺼림표 [(].*?[)]을 사용해보세요.

docs의 한정 기호를 참조하십시오.

할 수 있습니다 또한 이스케이프 대신과 같이, 사용자 정의 문자 클래스를 사용하는 괄호 : \\(\\),하지만 그 문제와는 아무 상관이있다. 그에서 보장합니다 -

또한이 아닌 빈 괄호에 일치하는 항목을 제한하려면, 대신 .+?를 사용하므로 * 정량은, 0+ 문자와 일치합니다

  • (esprittn 감사)주의 괄호 안의 문자 하나 이상.
+1

과 [(]. *? [)]를 함께 사용하면()와 같은 빈 괄호가 일치하므로 *를 + – esprittn

+0

@esprittn이라는 좋은 점으로 대체하십시오. 이걸 추가합시다. – Mena

0

희망은 아래의 코드 도움이 : 그 추출물 사이의 데이터를 '('& ')'를 포함.

String pattern = "\\(.*\\)"; 
    String line = "save(xx,yy)"; 
    Pattern TokenPattern = Pattern.compile(pattern); 

    Matcher m = TokenPattern.matcher(line); 
    while (m.find()) { 

     int start = m.start(0); 
     int end = m.end(0); 

     System.out.println(line.substring(start, end)); 

    } 

는 서브 캐릭터의 경계 인덱스가 취해지고 변경 '말단-1' '+ 1을 시작하는'과 ''말단에 브래킷 변화 '시작'을 제거한다.

관련 문제