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