使用正则表达式提取子字符串不起作用
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]
。从那里您可以通过 indexOf
和 substring
的组合轻松提取 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);
我有这样一个字符串:
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]
。从那里您可以通过 indexOf
和 substring
的组合轻松提取 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);