如何使用正则表达式解析字符串?

时间:2014-03-23 22:48:20

标签: java regex parsing

如何使用正则表达式从DELETE检索ROLE_DELETE_USER字符串?

String role = "ROLE_DELETE_USER";
Pattern pattern = Pattern.compile("???");
Matcher matcher = pattern.matcher(role);
System.out.println(matcher.group());

3 个答案:

答案 0 :(得分:2)

你可以做到

String delete = role.substring(role.indexOf("_") + 1, role.lastIndexOf("_"));

答案 1 :(得分:0)

仅解析一个字符串示例没有用处,因为您可以通过多种方式完成此操作。如果你愿意,这里有几种模式:

[A-Z]+_(.*)_[A-Z]+
[A-Za-z]+_(.*)_[A-Za-z]+

哪个会出现:

String role = "ROLE_DELETE_USER";
Pattern pattern = Pattern.compile("[A-Z]+_(.*)_[A-Z]+");
Matcher matcher = pattern.matcher(role);
matcher.find();
System.out.println(matcher.group(1));

另一种解决方案(不使用正则表达式)会将角色分解为字符串数组:

String input = "ROLE_DELETE_USER";
String[] tasks = input.split("_");
//args[0] == "ROLE"
//args[1] == "DELETE"
//args[2] == "USER"

这样可以更灵活地确定您想要对输入做什么。

答案 2 :(得分:0)

正则表达式用于处理模式。你没有太多的模式(只是一个例子),但这至少在一个案例中起作用。

String role = "ROLE_DELETE_USER";
Pattern pattern = Pattern.compile("^ROLE_(.*)_USER$");
Matcher matcher = pattern.matcher(role);
if(matcher.find()) {
    System.out.println(matcher.group(1));
}

此处,(.*)是一个捕获组。 match.group(1)检索第一个捕获组的内容。


当然,你也可以这样做

String role = "ROLE_DELETE_USER";
role = role.substring(5, role.length() - 5)
System.out.println(role);