2011-11-18 62 views
1

我找不到任何用正則表達式解析的好資源。有人可以告訴我方式。java正則表達式獲取子字符串

我該如何解析這條語句?

「在file.c斷點10,主():10」

我想獲得子 「主要()」 或第三語句的話。

+0

請定義你想在哪個標準下得到這個結果 –

+1

沒有足夠的細節。你想得到你的字符串的第三個字嗎?或者「斷點10,*在file.c:10」中總是包含什麼?還是其他什麼? – Guillaume

+0

您是否想要查找確切的字符串'main()'或任何可能包含參數的方法名?無論如何,regular-expressions.info有一個很好的正則表達式引用和一些教程(甚至是Java特定的)。 – Thomas

回答

3

這工作:

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)); 
    } 
} 

基本上正則表達式與.(.*) at組(1)返回值main()

0

嘗試:.*Breakpoint \d+, (.*) at

0

好,正則表達式main \(\)解析這個。然而,我懷疑你會喜歡在第一個comman之後和最後一個「at」之前的所有東西:,(.*) atgroup(1)中爲您提供了在表達式中由括號打開的內容。

2

假設您想要字符串(如您的評論中所述)的第3個字,請首先使用StringTokenizer將其分開。這將允許您指定分隔符(空間是由默認值)

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); 

返回main 如果您還想要(),你定義空格隔開,還需要採取的下一個字words.get(3)