使用Regex从输入中解析String

时间:2014-04-29 16:29:56

标签: java regex

这是我匹配字符串的代码,如:

    String name = qualified.replaceAll(".*\\.(?=\\w+)", "");

从输入org.myapp.TestData$RootEntity获取TestData$RootEntity

的位置

但是我需要能够只获得String的RootEntity部分。有效地得到这个。

输入字符串:

com.domain.app.RootEntity

com.domain.app.TestData$RootEntity

com.domain.app.TestData$TestNested$RootEntity

应该能够获得RootEntity

4 个答案:

答案 0 :(得分:1)

试试这个:

String name = qualified.replaceAll(".+?\\W", "");

.*\\W匹配$.之前的所有内容,并将其替换为空字符串。

答案 1 :(得分:1)

尝试使用简单的String#lastIndexOf()

    String qualified = "org.myapp.TestData$RootEntity";

    String name = qualified.substring(qualified.lastIndexOf('$') + 1);

完整代码

    String[] values = new String[] { "com.domain.app.RootEntity",
            "com.domain.app.TestData$RootEntity",
            "com.domain.app.TestData$TestNested$RootEntity" };

    for (String qualified : values) {
        int index = qualified.lastIndexOf('$');

        String name = null;
        if (index != -1) {
            name = qualified.substring(qualified.lastIndexOf('$') + 1);
        } else {
            name = qualified.substring(qualified.lastIndexOf('.') + 1);
        }

        System.out.println(name);
    }

输出:

RootEntity
RootEntity
RootEntity

答案 2 :(得分:0)

简单:

String resultString = qualified.replaceAll("(?m).*?(RootEntity)$", "$1");

答案 3 :(得分:0)

com.domain.app.RootEntity
com.domain.app.TestData$RootEntity
com.domain.app.TestData$TestNested$RootEntity
  

应该能够获得RootEntity

看起来您想删除.$之后app.TestData$的名称的每个部分。

如果是这种情况,您可以尝试

replaceAll("\\w+[.$]", "")

演示

String[] data = {
        "com.domain.app.RootEntity",
        "com.domain.app.TestData$RootEntity",
        "com.domain.app.TestData$TestNested$RootEntity",
};
for (String s:data)
    System.out.println(s.replaceAll("\\w+[.$]", ""));

输出:

RootEntity
RootEntity
RootEntity