返回

正则表达式教程:识别网址 (URL)

正则表达式

一、正则解释

要匹配网址 (URL),可以使用以下正则表达式:

/^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?/
  • ^: 匹配字符串的开头。
  • ((ht|f)tps?):\/\/: 匹配可选的协议(HTTP 或 HTTPS)和双斜杠 (//)。
  • ([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+: 匹配域名,其中包括:
    • [^!@#$%^&*?.\s-]: 不包含特殊字符或空格的域名前缀部分。
    • ([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?: 不包含特殊字符或空格的最多 63 个字符的后缀部分。
    • \.: 匹配点号 (.)。
  • [a-z]{2,6}: 匹配 2 到 6 个小写字母的顶级域名 (TLD)。
  • \/?: 匹配可选的尾部斜杠 (/)。

二、使用场景

这个正则表达式可用于多种场景中,例如:

  • 从文本中提取网址。
  • 验证输入的网址格式。
  • 创建更高级别的 URL 解析规则。

三、代码示例

JavaScript

const regex = /^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?/;
const url = 'https://vuejs.org/v2/api/#v-model';
console.log(regex.test(url)); // true

Java

import java.util.regex.Pattern;

public class UrlMatcher {

    public static boolean isValidUrl(String url) {
        Pattern pattern = Pattern.compile("^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?");
        return pattern.matcher(url).matches();
    }

    public static void main(String[] args) {
        String url = "https://vuejs.org/v2/api/#v-model";
        System.out.println(isValidUrl(url)); // true
    }
}

PHP

<?php

$regex = '/^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?/';
$url = 'https://vuejs.org/v2/api/#v-model';
preg_match($regex, $url, $matches);

if ($matches) {
    echo '有效的 URL';
} else {
    echo '无效的 URL';
}
?>

Python

import re

regex = r'^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?
import re

regex = r'^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?$'
url = 'https://vuejs.org/v2/api/#v-model'
result = re.match(regex, url)

if result:
    print('有效的 URL')
else:
    print('无效的 URL')
#x27;
url = 'https://vuejs.org/v2/api/#v-model' result = re.match(regex, url) if result: print('有效的 URL') else: print('无效的 URL')