📜  url 正则表达式 - Java (1)

📅  最后修改于: 2023-12-03 14:48:14.219000             🧑  作者: Mango

URL正则表达式 - Java

正则表达式(Regular Expression)是计算机科学中的一种基础概念,被广泛应用于各种编程语言和应用程序中。URL正则表达式(URL Regular Expression)则是在正则表达式的基础上针对URL进行的一种特定的匹配规则。

在Java中,我们可以使用正则表达式类(java.util.regex)来创建和执行正则表达式。下面将介绍如何使用正则表达式类来创建和执行URL正则表达式。

URL的基本结构

在构建URL的正则表达式之前,我们需要先了解URL的基本结构。一个标准的URL通常由以下几个部分组成:

<协议>://<主机>:<端口>/<路径>?<查询>#<锚点>

其中:

  • <协议>:通常是HTTP或HTTPS,但也可以是FTP、SFTP等协议;
  • <主机>:指定URL的主机名或IP地址;
  • <端口>:指定URL服务器的端口号;
  • <路径>:指定URL中资源所在的路径;
  • <查询>:指定查询参数,以&分隔;
  • <锚点>:指定文档内的位置。
创建URL正则表达式

根据URL的基本结构,我们可以创建如下的URL正则表达式:

^(https?://)?([0-9a-zA-Z]+\\.)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,6}(:\\d+)?(/[\\w\\- ./?%&=]*)?(#[\\w]*)?$

该正则表达式匹配的URL包括以下几种情况:

  • http://example.com
  • https://example.com
  • http://www.example.com
  • https://www.example.com
  • http://example.com:8080
  • https://example.com:8080
  • http://www.example.com:8080
  • https://www.example.com:8080
  • http://example.com/path/to/file.html
  • https://example.com/path/to/file.html
  • http://www.example.com/path/to/file.html
  • https://www.example.com/path/to/file.html
  • http://example.com/path/to/file.html?param=value&param2=value2
  • https://example.com/path/to/file.html?param=value&param2=value2
  • http://www.example.com/path/to/file.html?param=value&param2=value2
  • https://www.example.com/path/to/file.html?param=value&param2=value2
  • http://example.com/path/to/file.html#anchor
  • https://example.com/path/to/file.html#anchor
  • http://www.example.com/path/to/file.html#anchor
  • https://www.example.com/path/to/file.html#anchor
使用URL正则表达式

在Java中,我们可以使用正则表达式类(java.util.regex)来创建和执行正则表达式。下面是一个示例程序:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestRegex {
    public static void main(String[] args) {
        String regex = "^(https?://)?([0-9a-zA-Z]+\\.)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,6}(:\\d+)?(/[\\w\\- ./?%&=]*)?(#[\\w]*)?$";
        Pattern pattern = Pattern.compile(regex);

        String[] urls = {
                "http://example.com",
                "https://example.com",
                "http://www.example.com",
                "https://www.example.com",
                "http://example.com:8080",
                "https://example.com:8080",
                "http://www.example.com:8080",
                "https://www.example.com:8080",
                "http://example.com/path/to/file.html",
                "https://example.com/path/to/file.html",
                "http://www.example.com/path/to/file.html",
                "https://www.example.com/path/to/file.html",
                "http://example.com/path/to/file.html?param=value&param2=value2",
                "https://example.com/path/to/file.html?param=value&param2=value2",
                "http://www.example.com/path/to/file.html?param=value&param2=value2",
                "https://www.example.com/path/to/file.html?param=value&param2=value2",
                "http://example.com/path/to/file.html#anchor",
                "https://example.com/path/to/file.html#anchor",
                "http://www.example.com/path/to/file.html#anchor",
                "https://www.example.com/path/to/file.html#anchor"
        };

        for (String url : urls) {
            Matcher matcher = pattern.matcher(url);
            System.out.println(url + ": " + matcher.matches());
        }
    }
}

运行以上程序,输出如下:

http://example.com: true
https://example.com: true
http://www.example.com: true
https://www.example.com: true
http://example.com:8080: true
https://example.com:8080: true
http://www.example.com:8080: true
https://www.example.com:8080: true
http://example.com/path/to/file.html: true
https://example.com/path/to/file.html: true
http://www.example.com/path/to/file.html: true
https://www.example.com/path/to/file.html: true
http://example.com/path/to/file.html?param=value&param2=value2: true
https://example.com/path/to/file.html?param=value&param2=value2: true
http://www.example.com/path/to/file.html?param=value&param2=value2: true
https://www.example.com/path/to/file.html?param=value&param2=value2: true
http://example.com/path/to/file.html#anchor: true
https://example.com/path/to/file.html#anchor: true
http://www.example.com/path/to/file.html#anchor: true
https://www.example.com/path/to/file.html#anchor: true
总结

通过本文,我们了解了URL的基本结构,并可以根据其基本结构创建出对应的URL正则表达式。在程序中,我们可以使用正则表达式类(java.util.regex)来创建和执行URL正则表达式,从而实现对URL的匹配验证。