你如何将URL的粗体部分解析为字符串?只有我想到的方法是疯狂的子串和indexOf,这对我来说似乎不是正确的方式......而且我并不是特别强大在regexps所以任何帮助表示赞赏。
http://url.com/portal/classic/showcase?portal%3AwindowState=normal&navigationalstate=JBPNS_rO0ABXelAARkZW1vAAAAAQAHdG9vbEJhcgAQX2pzZkJyaWRnZVZpZXdJZAAAAAEAIS9yaWNoZmFjZXMvY29tcG9uZW50LXNhbXBsZS54aHRtbAAcamF2YXgucG9ydGxldC5mYWNlcy5WaWV3TGluawAAAAEABHRydWUABHNraW4AAAABAAdibHVlU2t5AAZzYW1wbGUAAAABAAd0b29sQmFyAAdfX0VPRl9f&portal%3AcomponentId=f708c77a-5730-44dd-b1f8-59215adca680&portal%3AresourceID=的 /images/icons/create_doc.gif &安培;门%3AcacheLevel = PAGE&安培;门%3Atype =资源&安培;门%3AportletMode =视图“
P.S。它是一个门户URL,但它并不重要,因为我只有JDK而没有portlet工具供我使用:)
答案 0 :(得分:2)
如果您接受黑客攻击,则无需在regexp中保持强大。
substring
和indexOf
s:
String s = "http://url.com/portal/classic/showcase?portal%3AwindowState=normal&navigationalstate=JBPNS_rO0ABXelAARkZW1vAAAAAQAHdG9vbEJhcgAQX2pzZkJyaWRnZVZpZXdJZAAAAAEAIS9yaWNoZmFjZXMvY29tcG9uZW50LXNhbXBsZS54aHRtbAAcamF2YXgucG9ydGxldC5mYWNlcy5WaWV3TGluawAAAAEABHRydWUABHNraW4AAAABAAdibHVlU2t5AAZzYW1wbGUAAAABAAd0b29sQmFyAAdfX0VPRl9f&portal%3AcomponentId=f708c77a-5730-44dd-b1f8-59215adca680&portal%3AresourceID=/images/icons/create_doc.gif&portal%3AcacheLevel=PAGE&portal%3Atype=resource&portal%3AportletMode=view";
String s1 = s.substring(s.indexOf("resourceID=") + "resourceID=".length());
System.out.println(s1.substring(0, s1.indexOf('&')));
正则表达式
Pattern pat = Pattern.compile("resourceID=(.*?)&");
Matcher mat = pat.matcher(s);
mat.find();
System.out.println(mat.group(1));
答案 1 :(得分:1)
Apache URLEncodedUtils可以为您完成此操作。
public static List<NameValuePair> parse(URI uri,
String encoding)
对于这种情况,我建议使用这样的库而不是正则表达式。 Apache库之前会遇到边缘情况等,并将进行编码。