如何匹配文本文件中的模式列表中的URL?

时间:2011-09-02 19:14:23

标签: java regex pattern-matching

我有一个文本文件,其中包含以下格式的元网址:

http://www.xyz.com/.*services/
http://www.xyz.com/.*/wireless

我想将该文件中的所有模式与我的URL进行比较,并在找到匹配项时执行操作。这个匹配过程对我来说很难理解。

假设splitarray [0]包含第一行文本文件:

            String url = page.getWebURL().getURL();         
            URL url1 = new URL(url);

我们怎样才能将url1与splitarray [0]进行比较?

已更新

BufferedReader readbuffer = null;
        try {
            readbuffer = new BufferedReader(new FileReader("filters.txt"));
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        String strRead;


        try {
            while ((strRead=readbuffer.readLine())!=null){
                String splitarray[] = strRead.split(",");
                String firstentry = splitarray[0];
                String secondentry = splitarray[1];
                String thirdentry = splitarray[2];
                //String fourthentry = splitarray[3];
                //String fifthentry = splitarray[4];
                System.out.println(firstentry + " " + secondentry+ " " +thirdentry);
                URL url1 = new URL("http://www.xyz.com/ship/reach/news-and");

                Pattern p = Pattern.compile("http://www.xyz.com/.*/reach");
                Matcher m = p.matcher(url1.toString());

                if (m.matches()) {
                  //Do whatever
                    System.out.println("Yes Done");
                }



                }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

匹配工作正常...但是如果我想要任何以splitarray [0]中的模式开头的url然后执行此操作...我们如何实现这一点...如上所述它是不匹配,但此网址http://www.xyz.com/ship/w仅来自此模式http://www.xyz.com/.*/reach所以任何以此模式开头的网址...只是在if循环中执行此操作...任何建议都将受到赞赏......! !

2 个答案:

答案 0 :(得分:2)

你在这里错过了一步。您首先需要将您的网址转换为正则表达式,或设计一种方法来使用这些网址,然后才能将您的网址url1与这些模式进行比较。

根据您展示的模式,我假设您正在为xyz解决方案设计软件,就像他们的路由器一样。因此,您的网址可能属于简单的图案样式,例如     http://www.xyz.com/的正则​​表达式,此处

答案 1 :(得分:1)

我对正则表达式的来源感到困惑。文字文件?在任何情况下,您都很难将url1与任何正则表达式进行比较,因为它是URL对象,而正则表达式比较字符串。因此,您需要坚持使用String url

试试这个:

Pattern p = Pattern.compile(splitarray[0]);
Matcher m = p.matcher(url);

if (m.matches()) {
  //Do whatever
}

m.matches()方法检查您提供的整个String是否与模式匹配,这可能就是您想要的。如果您需要检查字符串的一部分是否匹配,请改用m.find()

<强>更新

由于您只想匹配字符串开头的模式,因此您需要使用m.find()。特殊字符^仅匹配字符串的开头,因此将其添加到正则表达式的前面,例如:

Pattern p = Pattern.compile("^" + splitarray[0]);