首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式未正确解析URL

正则表达式未正确解析URL
EN

Stack Overflow用户
提问于 2014-11-04 01:39:47
回答 1查看 75关注 0票数 0

我有一个文本文件,其中包含复杂的URLS。以下是一个示例:

代码语言:javascript
复制
https://www.google.com/?gws_rd=ssl
http://www.cs.jhu.edu/news-events/news-articles/
maps.google.com
http://www.cnn.com/WORLD/?hpt=sitenav
http://www.cnn.com/JUSTICE/?hpt=sitenav
http://www.cs.jhu.edu/course-info/
http://e-catalog.jhu.edu/departments-program-requirements-and-courses/engineering/computer-science/
http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html
http://mexico.cnn.com/?hpt=ed_Mexico
cnn.com

从这些行中,我只想得到"X.Y“部分。换句话说,在前4行中,我想得到:

代码语言:javascript
复制
google.com
jhu.edu
google.com
cnn.com

为了做到这一点,我做了一个正则表达式,并试图匹配它:

代码语言:javascript
复制
public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\Me\\Desktop\\homework4file.txt"));
        String line = null;
        Pattern pattern = Pattern.compile("^[a-zA-Z0-9\\-\\.]+\\.(com)$");
        Matcher matcher;
        while((line = reader.readLine()) != null) {
            matcher = pattern.matcher(line);
            while(matcher.find()) {
                System.out.println(matcher.group(1));
            }
        }
    }

我的正则表达式只是为每一行返回"com“。我不明白我写的东西有什么问题。有人能解释一下我表达中的逻辑错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-04 01:43:56

你不需要放锚。^断言我们处于起步阶段,但.com之前的部分还没有开始。[a-zA-Z0-9\\-\\.]+会在.com到达/之前贪婪地匹配这个部分。在这个http://mexico.cnn.com/?hpt=ed_Mexico字符串中,regex [a-zA-Z0-9\\-\\.]+\\.(com)将匹配mexico.cnn.com而不是cnn.com.And,也可以通过将comedu放入由|分隔的非捕获组来匹配.edu之前的字符串。

代码语言:javascript
复制
[^.\\n]+\\.(?:com|edu)

演示

代码语言:javascript
复制
String input = "https://www.google.com/?gws_rd=ssl\n" +
"http://www.cs.jhu.edu/news-events/news-articles/\n" +
"maps.google.com\n" +
"http://www.cnn.com/WORLD/?hpt=sitenav\n" +
"http://www.cnn.com/JUSTICE/?hpt=sitenav\n" +
"http://www.cs.jhu.edu/course-info/\n" +
"http://e-catalog.jhu.edu/departments-program-requirements-and-courses/engineering/computer-science/\n" +
"http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html\n" +
"http://mexico.cnn.com/?hpt=ed_Mexico\n" +
"cnn.com";
Pattern regex = Pattern.compile("[^.\\n]+\\.(?:com|edu)");
Matcher matcher = regex.matcher(input);
while(matcher.find()){
            System.out.println(matcher.group(0));
   }

输出:

代码语言:javascript
复制
google.com
jhu.edu
google.com
cnn.com
cnn.com
jhu.edu
jhu.edu
oracle.com
cnn.com
cnn.com
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26726393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档