2011-09-02 47 views
-3

我有一个包含以下形式荟萃URL的文本文件:如何匹配文本文件中的模式列表中的url?

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],然后做到这一点......我们如何能够实现这...在上面的情况下,它不匹配,但这个网址http://www.xyz.com/ship/w是从这种模式只http://www.xyz.com/.*/reach因此,任何网址,以这种模式开始..只是在if循环中做这件事...任何建议将不胜感激。 .. !!

回答

1

我很困惑,正则表达式来自哪里。文本文件?无论如何,你将很难将url1与任何正则表达式进行比较,因为它是URL对象,并且正则表达式比较字符串。所以你会想要坚持使用你的String url

试试这个:

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

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

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

更新

既然你只希望匹配的字符串开头的模式,你需要使用m.find()代替。特殊字符^只在字符串开始处匹配,这样添加到你的正则表达式的前面,例如:

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

+0

见上面我的更新。 – andronikus

+0

也许你会考虑接受我的答案,因为它解决了你的问题? – andronikus

2

你在这里失踪了一步。您首先需要将您的网址翻译为正则表达式,或者设计一个使用这些网址的方法,然后才能将您的网址url1与这些模式进行比较。

根据你所显示的模式,我假设你正在为xyz解决方案设计软件,就像他们的路由器一样。因此,您的网址应该落在一个简单的图案风格,像 http://www.xyz.com/正则表达式,这里

相关问题