我必须在这里找到一些非常简单的东西。我正在尝试匹配给定字符串中的确切URL。这是代码:
String pattern = "\\b.*"+"\"http://fonts.googleapis.com/css?family=Montserrat:400,700\""+"\\b";
Pattern p=Pattern.compile(pattern);
Matcher m=p.matcher("<link href=\"http://fonts.googleapis.com/css?family=Montserrat:400,700\"");
System.out.println(m.find()); // returns false
但是当我尝试使用本地资源时,相同的代码也可以运行:
pattern = "\\b.*"+"style.css"+"\\b";
p=Pattern.compile(pattern);
m=p.matcher("<link href=\"css/style.css\"");
System.out.println(m.find()); // returns true
答案 0 :(得分:1)
您错过了在您尝试匹配的网址中存在问号的事实。问号是一个量词,这意味着它由正则表达式引擎专门处理(这个量词意味着&#34;零或更多的先前识别的原子&#34;)。
您不希望解释该问号;这意味着你的正则表达式应该以不同的方式构建......并且有一种方法:
final String quotedUrl
= Pattern.quote("http://fonts.googleapis.com/css?family=Montserrat:400,700");
final String regex = "\\b\"" + quotedUrl + "\"\\b";
final Pattern pattern = Pattern.compile(regex);
// work with the regex
请注意,事实上,Pattern.quote()
只能使用正则表达式特殊序列\Q
和\E
围绕您的输入。这些都是从perl借来的,不出所料,因为到目前为止,perl regex一直是所有成功的正则表达式引擎的通用语言。
答案 1 :(得分:0)
除非你有其他意图,否则边界断言和正则表达式的使用似乎与此无关。我建议只使用contains或indexOf使用非正则表达式解决方案。
String url = "http://fonts.googleapis.com/css?family=Montserrat:400,700";
String src = "<link href=\"http://fonts.googleapis.com/css?family=Montserrat:400,700\"";
System.out.println(src.contains(url));