我无法使用Pattern.compile获取网址

时间:2016-02-04 06:02:49

标签: java arrays parameters

我真正想要的是返回txt变量中的URL。网址来自随机然后不是常规expreccion使用或不是我的代码这部分写得不好...使用谷歌翻译只对不起我说西班牙语;醇

//I can't get the url with Pattern.compile

//My code example::::: in the works :(

String txt="sources: [{file:\"http://pla.cdn19.fx.rrrrrr.com/luq5t4nidtixexzw6wblbiexs7hg2hdu4coqdlltx6t3hu3knqhbfoxp7jna/normal.mp4\",label:\"360p\"}],sources: [{file:\"http://pla.cdn19.fx.rrrrrr.com/luq5t4nidtixexzw6wblbiexs7hg2hdu4coqdlltx6t3hu3knqhbfoxp7jna/normal.mp4\",label:\"360p\"}]";

ArrayList<String> getfi = new ArrayList<String>();
Matcher matcher = Pattern.compile("sources: [{file:\"(.*)\"").matcher(txt);

if (matcher.find()) {
    while(matcher.find()) {
        getfi.add(matcher.group(1));
    }  
    System.out.println(getfi);

} else {
    System.exit(1);
}

1 个答案:

答案 0 :(得分:1)

mysql_*

你的正则表达式是错误的,因为Pattern.compile("sources: [{file:\"(.*)\"") [都是特殊字符,所以必须对它们进行转义。这就是为什么你得到{,这是你在问题中没有提到的。

此外,模式将匹配整个字符串,但最后两个字符除外。

PatternSyntaxException: Unclosed character class near index 21

if (matcher.find()) { while(matcher.find()) { 语句中的find()调用会消耗第一个查找。由于第一个查找是除最后两个字符之外的整个文本,因此if循环中find()调用没有第二个查找,因此永远不会输入循环。

要使其正常工作,请转义特殊字符,将while更改为不贪婪,然后修复循环:

.*

警告:  请注意,有时String txt="sources: [{file:\"http://pla.cdn19.fx.rrrrrr.com/luq5t4nidtixexzw6wblbiexs7hg2hdu4coqdlltx6t3hu3knqhbfoxp7jna/normal.mp4\",label:\"360p\"}],sources: [{file:\"http://pla.cdn19.fx.rrrrrr.com/luq5t4nidtixexzw6wblbiexs7hg2hdu4coqdlltx6t3hu3knqhbfoxp7jna/normal.mp4\",label:\"360p\"}]"; Matcher matcher = Pattern.compile("sources: \\[\\{file:\"(.*?)\"").matcher(txt); ArrayList<String> getfi = new ArrayList<String>(); while (matcher.find()) { getfi.add(matcher.group(1)); } if (getfi.isEmpty()) { System.exit(1); } System.out.println(getfi); 之后会有一个空格,有时则不会。这对JSON完全有效。 JSON文本可能包含空格,包括换行符,因此使用简单的正则表达式不是一个好主意。

改为使用JSON解析器。