我得到的字符串是这样的
main.c:11: error: 'qz' undeclared (first use in this function)
像函数的参数。我需要使用正则表达式和拆分文件名 ( main.c )、第 (11) 行和消息( 'qz' undeclared (first use in this function) )。 我这样写正则表达式
private static Pattern patern=Pattern.compile("([a-zA-Z0-9_-]+\.c:)([0-9]+:)(.)*");
但它并没有 split 。谁能告诉我要使用什么正则表达式?
最佳答案
你至少需要转义那个\
。尝试
"([a-zA-Z0-9_-]+\\.c:)([0-9]+:)(.)*"
相反。
这是一个演示:
import java.util.regex.*;
public class Test {
public static void main(String[] args) {
String input = "main.c:11: error: 'qz' undeclared (first use in this function)";
Pattern p = Pattern.compile("([^:]+\\.c):(\\d+):(.*)");
Matcher m = p.matcher(input);
if (m.matches()) {
System.out.println("File: " + m.group(1));
System.out.println("Line: " + m.group(2));
System.out.println("Message: " + m.group(3));
}
}
}
打印:
File: main.c
Line: 11
Message: error: 'qz' undeclared (first use in this function)
另一种选择就是执行 input.split(":")
。
关于java - 使用正则表达式在错误消息中拆分文件和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4780058/