正则表达式 - 堆栈跟踪 - 匹配除java类行号之外的所有数字

时间:2014-11-26 02:14:54

标签: java regex string

我试图想出一个正则表达式来匹配java堆栈跟踪中的模式。此正则表达式应标识字符串中的所有数字,但与java类对应的行号除外。

例如

str = "(SomeName.java:470) This is the 1st string out of a total of 50 string:345"

我想写一个标识1,50和345而不是470的正则表达式。

我提出了一个,但它并没有为我做到 - "(?<!.java:)[\d]*"

这得到70而不是470,原因是自我解释。

您能否帮我修改上述正则表达式以匹配示例中的模式?

3 个答案:

答案 0 :(得分:1)

\d+(?![^(]*\))

试试这个。看看演示。

http://regex101.com/r/oE6jJ1/9

如果您有34)这样的数据,请使用

^\([^)]*\)|(\d+)

并抓住捕获或组。参见演示。

http://regex101.com/r/oE6jJ1/11

答案 1 :(得分:1)

您可以按如下方式修改您的lookbehind断言。

(?<!java:)\b\d+

Live Demo

答案 2 :(得分:0)

Java代码:

String str1 = "(SomeName.java:470) This is the 1st string out of a total of 50 string:345";
String regex1 = "(?<!java:)\\b\\d+";
Matcher m = Pattern.compile(regex1).matcher(str1);
StringBuilder sb = new StringBuilder();
while (m.find()) {
    sb.append(" "+str1.substring(m.start(), m.end()));
}
System.out.println(sb.toString());