Java - 匹配字符串中的特定URL

标签 java regex string

我在这里遗漏了一些非常简单的东西。我正在尝试匹配给定字符串中的确切 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

最佳答案

您忽略了这样一个事实:在您尝试匹配的 URL 中,有一个问号。而问号是一个量词,这意味着它被正则表达式引擎特殊对待(这个量词的意思是“零个或多个先前识别的原子”)。

您不希望该问号被解释;这意味着你的正则表达式应该以不同的方式构建......并且有一种方法:

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 正则表达式已经成为迄今为止所有成功的正则表达式引擎的通用语言。

关于Java - 匹配字符串中的特定URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35591169/

相关文章:

java - 如何从 soap web 服务检索未知的 XML 并使用 java 插入数据库

正则表达式、数字或空

java - 带有反向引用的简单 Java 正则表达式不起作用

c++ - std::copy with return values - 防止 "expression: string iterators incompatible"的更好方法?

java - 保护不受信任的客户端上的 Java 运行时数据

java - 配置为 s3 通知处理程序时如何在 aws lambda 函数中给出错误响应

java - 删除句子前的第一个评论

java - 计算字符串中包含某个字符的单词数时得到错误的值

javascript - 将 Javascript 字符串传递给 php 字符串

java - 为什么我在这个 Java 动态 Web 项目中看不到任何 main 方法?