1

我需要创建一个 java 正则表达式,它将 URLS 与 http 或 https 匹配,但不应将 url 与特定文件扩展名匹配。

我可以使用以下表达式获取带有 http 或 https 的 url,但我无法完成第二部分,即消除具有某些扩展名的 url(例如:-js|css|jpg 等)。我想我需要使用否定,但是我不知道该怎么做。

String regex = "\\s*(?i)(http|https)\\s*://\\s*((\"[^\"]*\"|'[^']*'|([^'\">\\s]+)))";

请帮我修改这个正则表达式以满足这个要求。

4

2 回答 2

1

在 Java 中实现这一点的一种简单方法是使用Pattern类(来自java.util.regex)。要完成您的建议,您可以使用两个单独的正则表达式对象来检查 URL 的条件。例如(使用regex您问题中的字符串):

Scanner in = new Scanner(System.in);
String input = in.nextLine();
Pattern one = Pattern.compile(regex);
Pattern two = Pattern.compile("([^\s]+(\.(?i)(js|css|jpg|etc))$)");
if(one.matcher(input).matches() && !two.matcher(input).matches()) 
    System.out.println("It matches!");
else System.out.println("Nope!");

简而言之,使用两个 Pattern 对象使您的代码更具可读性和易于管理,因为您正在考虑有关 URL 输入字符串的多个方面。

于 2012-11-10T17:50:24.463 回答
1

您需要一个锚点来向后看 - 请参阅正则表达式以匹配应该为您提供所需表达式的 url。您当前拥有的正则表达式将匹配格式错误的 url 和不允许的字符。这是一个检查表达式的好网站:http ://www.regexplanet.com/advanced/java/index.html

于 2012-11-11T01:35:00.287 回答