Java 模式匹配第一个和第三个单词的每次出现(中间包含所有内容)

Java 模式匹配第一个和第三个单词的每次出现(中间包含所有内容),java,android,regex,pattern-matching,Java,Android,Regex,Pattern Matching,我正在尝试我认为是一个简单的正则表达式模式 我有一个文本文件,看起来像这样: 废话废话。这里还有别的事,诸如此类 呸。更多的文字。。。胡说八道。 我想从中得到的是任何以http开头,以jpg结尾的文本。不是整个URL。只有以.jpg结尾的 换句话说,我希望我的输出是: 我的正则表达式应该是:“\b(http)。*(jpg)\b”,它似乎可以工作。但是当与模式匹配一起使用时,我最终得到了从http的第一次出现到jpg的最后一次出现的所有内容。我知道我必须加倍逃避将\b更改为\b,但它仍然无法按

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

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

废话废话。这里还有别的事,诸如此类 呸。更多的文字。。。胡说八道。

我想从中得到的是任何以http开头,以jpg结尾的文本。不是整个URL。只有以.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());
             }
试一试


成功了!所以它是双转义,然后是+?对于“through”语法。这与标准正则表达式相差甚远。我要去读更多关于模式匹配的文档。:-)谢谢你的快速回答!
Matcher m = Pattern.compile("\\bhttp://\\S+?\\.jpg\\b").matcher(s);