我是java正则表达式的新手。我需要提取“com.mycomp.war.tasks.JmxMetricsTask” 从下面的线。我怎么处理正则表达式?
String test = "id= com.mycomp.war.tasks.JmxMetricsTask I run/id-geLh3hM1-1_2 [Svc--DAG]";
太复杂了吗? 正则表达式有可能吗? 我需要提取上面的回报吗?
VG
答案 0 :(得分:0)
您需要更彻底地定义问题和要求。
对于您展示的示例,有一个更简单的解决方案:
String test = "id= com.mycomp.war.tasks.JmxMetricsTask I run/id-geLh3hM1-1_2 [Svc--DAG]";
String answer = test.substring(3).trim().split(" ", 2)[0];
免责声明:这可能不适用于所有可能的输入。这就是为什么我说你需要完全定义你的情况。如果您的所有输入都与我根据您的一个示例所做的假设相匹配,那么这将不使用正则表达式。
答案 1 :(得分:0)
不需要正则表达式。你可以像
那样做String test = "id= com.mycomp.war.tasks.JmxMetricsTask I run/id-geLh3hM1-1_2 [Svc--DAG]";
String subTest = "com.mycomp.war.tasks.JmxMetricsTask";
test.substring(test.indexOf(subTest), subTest.length() + test.indexOf(subTest));
但你能解释一下你的实际要求吗?使用上面的内容,您可以获得所需的字符串部分
答案 2 :(得分:-1)
好吧,你可以搜索一个类似的问题。
我从顶部答案修改了正则表达式以适合您的情况。我将^…$
(行开头/结尾)部分替换为\b
(字边界)。
import java.util.regex.*;
public class RegexTest {
public static final String PACKAGE_PATTERN = "\\b[a-z][a-z0-9_]*(\\.[a-z0-9_]+)+[0-9a-z_]\\b";
public static void main(String[] args) {
String s = "id= com.mycomp.war.tasks.JmxMetricsTask I run/id-geLh3hM1-1_2 [Svc--DAG]";
Pattern p = Pattern.compile(PACKAGE_PATTERN, Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group()); // com.mycomp.war.tasks.JmxMetricsTask
}
}
}
以下是使用Regex 101的实时示例:/\b[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]\b/ig
你也可以用空白字符拆分并抓住第二个令牌。
public class RegexTest {
public static void main(String[] args) {
String s = "id= com.mycomp.war.tasks.JmxMetricsTask I run/id-geLh3hM1-1_2 [Svc--DAG]";
String[] tokens = s.split("\\s+");
System.out.println(tokens[1]); // com.mycomp.war.tasks
}
}