java - 需要编写一个 java 正则表达式,该表达式与 http 或 https 的 url 匹配,但不包含特定的文件扩展名

标签 java regex expression regex-negation

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

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

字符串正则表达式 = "\\s*(?i)(http|https)\\s*://\\s*((\"[^\"]*\"|'[^ ']*'|([^'\">\\s]+)))";

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

最佳答案

在 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 输入字符串的多个方面。

关于java - 需要编写一个 java 正则表达式,该表达式与 http 或 https 的 url 匹配,但不包含特定的文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13324323/

相关文章:

java - 位于 ButtonGroup 中的 JradioButton 要 setSelected

Python 剥离 Google 快讯 URL

64-bit - 是否可以在 x64 中使用 Microsoft.Expression.Encoder.dll?

java - 比较android中的两个EditTexts字符串

java - Android 类层次结构和与 Fragment 的接口(interface)

java - spring @Scheduled 注释方法是否在不同的线程上运行?

r - 在正则表达式 R 中编写特殊字符列表

c# - 动态构建的正则表达式运行速度极慢!

c - 为什么编译器以不同的方式对待 i++++++i 和 i+++i

c# - 组合相同输入类型的选择表达式