2013-07-02 53 views
0

如何解析网址的粗体部分到字符串中?我脑子里想到的方式只有疯狂的子字符串和indexOfs,而这对我来说并不是一种正确的方式......而我在正则表达式中不是特别强,所以任何帮助都是值得赞赏的。解析门户网址

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 =视图”

PS这是一个门户网站的URL,但它其实并不重要因为我只在我手上:)有没有JDK门户工具

+2

'我在regexps'不是特别强 - 为什么不试一试?最终你可能会很强壮。 – devnull

+0

是的,我想我会,我一直推迟它太久:) –

回答

2

如果您接受黑客攻击,则无需在正则表达式中强大。

substring S和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)); 
+0

很酷,非常好! –

1

Apache URLEncodedUtils能为你做到这一点。

public static List<NameValuePair> parse(URI uri, 
         String encoding) 

我建议使用这样的库优先于正则表达式这种类型。将会有以前遇到的Apache库以及编码的边缘案例等。