我有一个文本文件,其中包含以下格式的元网址:
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循环中执行此操作...任何建议都将受到赞赏......! !
答案 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]);
等