2011-11-18 4 views
1

정규 표현식으로 파싱하기에 좋은 리소스를 찾을 수 없습니다. 누군가 제게 길을 보여 주시겠습니까?자바 정규식 get substring

어떻게이 문장을 구문 분석 할 수 있습니까? "file.c는에서 중단 점 (10), 주() : 10"

명령문의

내가 문자열을 얻을 싶다 "주()"또는 3 단어.

+0

이 결과를 얻고 자하는 기준으로 정의하십시오. –

+1

세부 정보가 충분하지 않습니다. 당신은 당신의 끈의 세번째 단어를 원하십니까? 또는 항상 "Breakpoint 10, * at file.c : 10"에 포함되는 것은 무엇입니까? 아니면 다른 것? – Guillaume

+0

정확한 문자열'main()'또는 매개 변수를 포함 할 수있는 메서드 이름을 찾고 싶습니까? 어쨌든, regular-expressions.info는 좋은 정규 표현식과 꽤 많은 튜토리얼을 가지고있다. – Thomas

답변

3

이 작동 : 기본적으로 정규 표현식 .(.*) at그룹

public void test1() { 
    String text = "Breakpoint 10, main() at file.c:10"; 
    String regex = ",(.*) at"; 

    Pattern pattern = Pattern.compile(regex); 
    Matcher matcher = pattern.matcher(text); 

    while (matcher.find()) { 
     System.out.println(matcher.group(1)); 
    } 
} 

(1) 값 main()을 반환.

0

시도 : 음 .*Breakpoint \d+, (.*) at

0

, 정규식 main \(\)이 구문을 분석합니다. 그러나, 나는 당신이 첫번째 comman 이후와 마지막 "at"전에 모든 것을 원한다고 생각합니다 : ,(.*) at그룹에서 (1)의 식에서 괄호로 열립니다.

2

문자열의 0 번째 단어를 (사용자 의견에서 말했듯이)이라고 가정하면 StringTokenizer을 사용하여 먼저 깰 수 있습니다. 즉, (공간이 기본입니다)

당신은 구분 기호로 공백을 정의 당신은 또한 ()하려면 main 을 반환
List<String> words = new ArrayList<String>(); 
String str = "Breakpoint 10, main() at file.c:10"; 
StringTokenizer st = new StringTokenizer(str); // space by default 

while(st.hasMoreElements()){ 
    words.add(st.nextToken()); 
} 

String result = words.get(2); 

, 당신은 또한 다음 단어를 취할 필요가 구분 기호를 지정할 수 words.get(3)