java正则表达式获取子串

时间:2011-11-18 10:55:12

标签: java regex

我找不到任何用于使用正则表达式解析的好资源。有人可以告诉我。

我该如何解析这个陈述?

  

“断点10,main()at file.c:10”

我想获取子句“main()”或语句的第3个单词。

6 个答案:

答案 0 :(得分:4)

这有效:

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

基本上,带有 group(1)的正则表达式.(.*) at会返回值main ()

答案 1 :(得分:2)

假设您想要第三个字符串(如评论中所述),请先使用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)

答案 2 :(得分:1)

你见过standard Sun tutorial on regular expressions吗?特别是关于matching groups的部分将是有用的。

答案 3 :(得分:1)

  1. 好网站regular-expressions.info
  2. 良好的在线测试人员regexpal.com
  3. Java http://download.oracle.com/javase/tutorial/essential/regex/
  4. 当我想玩Regex

    时,我转向这些

答案 4 :(得分:0)

尝试:.*Breakpoint \d+, (.*) at

答案 5 :(得分:0)

嗯,正则表达式main \(\)确实解析了这个。但是,我怀疑你想要在第一个comman之后和最后一个“at”之前的所有内容:,(.*) at group(1)中为你提供由表达式中的括号打开的内容