使用正则表达式提取子字符串不起作用

Extract a substring by using regex doesn't work

我有这样一个字符串:

String source = "https://1116.netrk.net/conv1?prid=478&orderid=[6aa3482b-519b-4127-abee-debcd6e39e96]"

我想提取 [ ] 内的 orderid。我写了这个方法:

public String extractOrderId(String source)
{
    Pattern p = Pattern.compile("[(.*?)]");
    Matcher m = p.matcher(source);
    if (m.find())
        return m.group(1);
    else
        return "";
}

但我总是得到异常

java.lang.IndexOutOfBoundsException: No group 1

知道出了什么问题吗?谢谢

您需要转义括号:

Pattern p = Pattern.compile("\[(.*?)\]");

您的 RegEx 缺少 \

Pattern p = Pattern.compile("\[(.*?)]");

您需要为 [] 使用转义字符,请尝试以下操作

Pattern p = Pattern.compile("\[(.*)\]");

您已使用[(.*?)]。方括号的含义请参考this

所以在这种情况下,您还需要为字符 [] 定义正则表达式。所以你需要从 Pattern.compiler.

中转义这些字符

以下将符合您的要求。

Pattern p = Pattern.compile("\[(.*?)\]");

除了使用正则表达式,您还可以使用 URL class 来提取查询:

URL url = new URL("https://1116.netrk.net/conv1?prid=478&orderid=[6aa3482b-519b-4127-abee-debcd6e39e96]");
String query = url.getQuery();

此时查询的值为prid=478&orderid=[6aa3482b-519b-4127-abee-debcd6e39e96]。从那里您可以通过 indexOfsubstring 的组合轻松提取 orderid

String searchFor = "orderid=[";
int fromIndex = query.indexOf(searchFor);
int toIndex = query.indexOf("]", fromIndex);

//6aa3482b-519b-4127-abee-debcd6e39e96
String orderId = query.substring(fromIndex+searchFor.length(), toIndex);