使用正则表达式从String中提取

时间:2013-06-28 22:47:51

标签: java regex string

我正在尝试提取标记为String的特殊部分。

String input = "$nick=someone$$message=something$";

现在我想将此String拆分为2个较小的字符串。

String nick = "someone";
String message = "something";

我知道,我可以使用常规表达式和String.replaceFirst()方法以某种方式做到这一点。但我真的不明白它是如何运作的。

3 个答案:

答案 0 :(得分:2)

您可以使用Java Pattern类将您的输入与正则表达式(字符串格式)明确匹配:"\\$nick=(.+?)\\$\\$message=(.+?)\\$"

public static void main(String[] args) {
    String input = "$nick=someone$$message=something$";
    String nick = null;
    String message = null;

    java.util.regex.Pattern p = java.util.regex.Pattern.compile("\\$nick=(.+?)\\$\\$message=(.+?)\\$");
    java.util.regex.Matcher m = p.matcher(input);
    if (m.find()) {
        nick = m.group(1);
        message = m.group(2);
    }

    System.out.println("Nick: "+nick);
    System.out.println("Message: "+message);
}

输出:

Nick: someone
Message: something

编辑:

我从你的评论中看到字符串有一个固定的格式。在这种情况下,带有String#indexOf()String#substring()可用于更简单的方法:

public static void main(String[] args) {
    String input = "$nick=someone$$message=something$";
    String nick = input.substring(input.indexOf("$nick=")+"$nick=".length(), input.indexOf("$$message="));
    String message = input.substring(input.indexOf("$$message=")+"$$message=".length(),input.length()-1);

    System.out.println("Nick: "+nick);
    System.out.println("Message: "+message);
}

答案 1 :(得分:1)

这会在输入String之后找到所有String分隔前的“=”和“$”:

String input = "$nick=someone$$message=something$";
Pattern pattern = Pattern.compile("=(.+?)\\$");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
    System.out.println(matcher.group(1));
}

输出:

someone
something

答案 2 :(得分:1)

运行此代码以了解如何从输入字符串中提取数据:

    String input = "$nick=someone$$message=something$";
    Pattern pattern = Pattern.compile("\\$([^=]+)=([^\\$]+)\\$");
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        String key = matcher.group(1);
        String value = matcher.group(2);
        System.out.println(key + " = " + value);
    }