0

我正在尝试我认为是一个简单的正则表达式模式。

我有一个看起来像这样的文本文件:

胡说八道http://www.google.com。这里还有别的东西,呜呜呜。http://x.oddree.com/image1.jpg。还有一些文字……等等。 http://x.oddree.com/image2.jpg

我试图从那里获取的是任何以 http 开头并以 jpg 结尾的文本。不是完整的网址。只有那些以 .jpg 结尾的。

换句话说,我希望我的输出是:

http://x.oddree.com/image1.jpg http://x.oddree.com/image2.jpg

我的正则表达式是: "\b(http).*(jpg)\b" 它似乎有效。但是当与模式匹配一​​起使用时,我最终会得到从 http 的第一次出现到 jpg 的最后一次出现的所有内容。我知道我必须双重转义将 \b 更改为 \b,但它仍然无法按预期工作。

为此,我已经把头撞在墙上好几个小时了。:-)

这是一个代码片段:

             if(file.exists())
             {
                 StringBuilder text = new StringBuilder();

                 try {
                     BufferedReader br = new BufferedReader(new FileReader(file));
                     String line;

                     while ((line = br.readLine()) != null) {
                         text.append(line);
                         text.append('n');
                     }
                 }
                 catch (IOException e) {
                     //TODO Write some error handling.
                 }

                 Pattern pattern = Pattern.compile(
                         "\\b(http).*(jpg)\\b"
                     );

                 Matcher matcher = pattern.matcher(text);
                 while (matcher.find()) {

                     result.add(matcher.group());
                 }

                 my_text.setText(result.toString());
             }
4

1 回答 1

0

尝试

Matcher m = Pattern.compile("\\bhttp://\\S+?\\.jpg\\b").matcher(s);
于 2013-04-19T00:40:31.450 回答