Quickie正则表达卡住了

时间:2010-12-07 14:02:50

标签: java

我有一线的善良:

"B8&soundFile=http%3A%2F%2Fwww.example.com%2Faeero%2Fj34d1.mp3%2Chttp%3A%2F%2Fwww.example.com%2Faudfgo%2set4.mp3"

我是否可以使用正则表达式直接将http提取到mp3?

我曾尝试阅读正则表达式的文档但没有提到如何从http到mp3。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

如果直接进行基于索引的String操作会更好。

 String data = "B8&soundFile=http%3A%2F%2Fwww.example.com%2Faeero%2Fj34d1.mp3%2Chttp%3A%2F%2Fwww.example.com%2Faudfgo%2set4.mp3";  

 System.out.println(data.substring(data.indexOf("http"), data.indexOf(".mp3")));

输出

http%3A%2F%2Fwww.example.com%2Faeero%2Fj34d1
B8&soundFile=http%3A%2F%2Fwww.example.com%2Faeero%2Fj34d1.mp3%2Chttp%3A%2F%2Fwww.example.com%2Faudfgo%2set4.mp3

答案 1 :(得分:1)

我可能不会用正则表达式来做这件事。 URL解码它,通过令牌对其进行分解,然后使用Java's URL class解析它。

答案 2 :(得分:0)

以下应该这样做(假设您希望将http和mp3作为匹配的一部分):

.*(http.*mp3)

如果你只想要那之间的位:

.*http(.*)mp3

例如:

    String input = "B8&soundFile=http%3A%2F%2Fwww.example.com%2Faeero%2Fj34d1.mp3%2Chttp%3A%2F%2Fwww.example.com%2Faudfgo%2set4.mp3";
    Pattern p = Pattern.compile(".*(http.*mp3)");
    Matcher m = p.matcher(input);
    if (m.find()) {
        System.out.println(m.group(1));
    }

给我们

http%3A%2F%2Fwww.example.com%2Faudfgo%2set4.mp3

答案 3 :(得分:0)

尝试http.+?mp3