打印出正则表达式的最后一个匹配项

时间:2015-04-28 07:28:53

标签: java regex

我有这段代码:

String responseData = "http://xxxxx-f.frehd.net/i/world/open/20150426/1370235-005A/EPISOD-1370235-005A-016f1729028090bf_,892,144,252,360,540,1584,2700,.mp4.csmil/.m3u8";
"http://xxxxx-f.frehd.net/i/world/open/20150426/1370235-005A/EPISOD-1370235-005A-016f1729028090bf_,892,144,252,360,540,1584,2700,.mp4.csmil/.m3u8";

String pattern = ^(https://.*\.54325)$;

Pattern pr = Pattern.compile(pattern);  

            Matcher math = pr.matcher(responseData);


            if (math.find()) {

            // print the url 

            }
            else {
                System.out.println("No Math");
            }

我想打印出以http开头并以.m3u8结尾的最后一个字符串。我该怎么做呢?我被卡住了。感谢所有帮助。

我现在遇到的问题是,当我找到数学以及打印出字符串的内容时,我从responseData获取所有内容。

1 个答案:

答案 0 :(得分:1)

如果你需要在类似子串之前的末尾获得一些子字符串,你需要确保正则表达式引擎已经消耗了尽可能多的字符,然后才能进行所需的匹配。

此外,您的模式中有^,表示beginning of a string。因此,它从一开始就开始匹配。

只需lastIndexOfsubstring

即可实现您想要的效果
System.out.println(str.substring(str.lastIndexOf("http://")));

或者,如果您需要正则表达式,则需要使用

String pattern = ".*(http://.*?\\.m3u8)$";

并使用math.group(1)打印该值。

Sample code

import java.util.regex.*;
public class HelloWorld{

     public static void main(String []args){

        String str = "http://xxxxx-f.akamaihd.net/i/world/open/20150426/1370235-005A/EPISOD-1370235-005A-016f1729028090bf_,892,144,252,360,540,1584,2700,.mp4.csmil/index_0_av.m3u8" +
"EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2795000,RESOLUTION=1280x720,CODECS=avc1.64001f, mp4a.40.2" +
"http://xxxxx-f.akamaihd.net/i/world/open/20150426/1370235-005A/EPISOD-1370235-005A-016f1729028090bf_,892,144,252,360,540,1584,2700,.mp4.csmil/index_6_av.m3u8";
        String rx = ".*(http://.*?\\.m3u8)$";
        Pattern ptrn = Pattern.compile(rx);
        Matcher m = ptrn.matcher(str);
        while (m.find()) {
            System.out.println(m.group(1));
        }
     }
}

输出:

http://xxxxx-f.akamaihd.net/i/world/open/20150426/1370235-005A/EPISOD-1370235-005A-016f1729028090bf_,892,144,252,360,540,1584,2700,.mp4.csmil/index_6_av.m3u8

Also tested on RegexPlanet