Java 正则表达式查找子串

Java regular expression find substring

我正在尝试在 Java 中的字符串中查找特定单词。我开发了一个函数旨在 return 找到的字符串。这是我现在写的:

public static String getValueByregexExpr (String str, String regexExpr) {
    Pattern regex = Pattern.compile (regexExpr, Pattern.DOTALL);
    Matcher matcher1 = regex.matcher (str);
    if (matcher1.find ()) {
        if (matcher1.groupCount () != 0 && matcher1.group (1) != null) {
            for (int i = 0; i <= matcher1.groupCount (); i++) {
                System.out.println ("matcher " + i + " for regex " + regexExpr + "= " + matcher1.group (i));
            }
            return matcher1.group (1);
        }
        return regexExpr;
    }
    return null;
}

我的问题如下,我希望找到一个正则表达式能够用我要查找的词填充组(1)。但是现在这个代码:

public static void main (String[] args) {

    String str = "HELLO_WORLD_123456 TEst";

    System.out.println ("First test");
    String regex1 = ".*WORLD.*";
    String matchedString = Util.getValueByregexExpr (str, regex1);
    //Here, I want to obtain matchedString = WORLD
    if (matchedString == null) {
        System.out.println ("matchedString null");
    } else if (matchedString.equals (regex1)) {
        System.out.println ("String found but empty group(1)");
    } else {
        System.out.println ("Result : " + matchedString);
    }

    //Here, I want to obtain matchedString = WORLD_123456
    System.out.println ("\nSecond test");
    String regex2 = "WORLD_([^_]+)";
    matchedString = Util.getValueByregexExpr (str, regex2);
    if (matchedString == null) {
        System.out.println ("regex " + regex2 + " matchedString null");
    } else if (matchedString == regex2) {
        System.out.println ("regex " + regex2 + " String found but empty group(1)");
    } else {
        System.out.println ("regex " + regex2 + " Result : " + matchedString);
    }

}

给我输出:

First test:
regex .*WORLD.* String found but empty group(1)

Second test:
matcher 0 for regex WORLD_([^_]+)= WORLD_123456
matcher 1 for regex WORLD_([^_]+)= 123456
regex WORLD_([^_]+) Result : 123456

首先,有没有正则表达式可以return: - 第一次测试的世界 - WORLD_123456 第二次测试

其次,一开始我想只要你只有一个结果,每个结果都会被设置到group(1)中。但鉴于测试 2 结果,我显然错了。有人可以给我更多相关信息吗?

感谢您的帮助。

要修复第一个问题,只需添加捕获组:

String regex1 = ".*(WORLD).*";

要修复第二个问题,请向字符 class:

添加空格
String regex2 = "(WORLD_[^_\s]+)";

demo

您的第一部分代码未按预期工作的主要原因是缺少 getValueByregexExpr 正在检查的捕获组。 第二个返回用 ([^_]+) 正则表达式部分捕获的 stirng 部分。

在正则表达式中,() 中的所有内容都成为一个组。

纠正你regex

String regex1 = ".*(WORLD).*";


String regex2 = "(WORLD_[^_\s]+)";