通配符(Wildcard)详解

通配符是一种特殊字符,用于表示一个或多个字符的占位符。它广泛应用于 文件搜索、路径匹配、正则表达式 等场景,帮助简化复杂的匹配规则。

常见通配符及其用途

1. 文件系统通配符

符号名称作用示例*星号匹配 任意数量 的任意字符(包括零个)。*.txt:匹配所有 .txt 文件。

data_*:匹配以 data_ 开头的文件。?问号匹配 单个 任意字符。file?.txt:匹配 file1.txt、file2.txt 等。[]方括号匹配方括号内指定的 任意一个字符。[abc].txt:匹配 a.txt、b.txt 或 c.txt。

[0-9].txt:匹配 0.txt 到 9.txt。{}花括号匹配花括号内的 任意一个选项(多个选项用逗号分隔)。{jpg,png,gif}:匹配 .jpg、.png 或 .gif 文件。

示例(命令行):

bash

# 查找所有 .java 文件

ls *.java

# 查找以 user 开头、后跟单个字符的文件

ls user?.txt

# 查找文件名包含数字 1 到 5 的文件

ls *[1-5]*.pdf

2. 正则表达式通配符

正则表达式中的通配符更强大,支持复杂的模式匹配:

符号作用示例.匹配 任意单个字符(除换行符外)。a.c:匹配 abc、a1c、a c 等。.*匹配 任意数量的任意字符(贪婪模式)。a.*c:匹配 abc、a123c、a c 等。+匹配 前面的元素一次或多次。a+:匹配 a、aa、aaa 等。?匹配 前面的元素零次或一次(非贪婪模式)。colou?r:匹配 color 或 colour。^匹配 字符串的开始位置。^abc:匹配以 abc 开头的字符串。$匹配 字符串的结束位置。abc$:匹配以 abc 结尾的字符串。\d匹配 数字字符(等价于 [0-9])。\d{3}:匹配 3 位数字(如 123)。\w匹配 单词字符(字母、数字、下划线)。\w+:匹配一个或多个单词字符(如 user_name)。

示例(Java):

java

import java.util.regex.Pattern;

// 验证邮箱格式

String email = "user@example.com";

boolean isValid = Pattern.matches("^\\w+@\\w+\\.\\w+$", email);

3. 网络路径通配符

在 URL 或文件路径中,通配符用于匹配特定模式:

符号作用示例*匹配 任意数量的任意字符(单个路径段)。/api/*:匹配 /api/users、/api/products 等。**匹配 任意数量的任意字符(包括路径分隔符)。/static/**:匹配 /static/js/main.js、/static/css/style.css 等。{variable}捕获 路径变量。/user/{id}:匹配 /user/123,id 为 123。

示例(Spring MVC):

java

@GetMapping("/api/products/{id}")

public Product getProduct(@PathVariable Long id) {

// 处理请求,id 为路径中的变量

}

不同场景下的通配符应用

1. 文件搜索(Windows/Linux)

bash

# Windows

dir *.docx # 查找所有 Word 文件

dir C:\data\* # 查找 C:\data 目录下的所有文件

# Linux/macOS

ls *.jpg # 查找所有 JPG 图片

find /home/user -name "*.txt" # 递归查找所有 .txt 文件

2. 网络路由(Spring MVC)

java

@Configuration

public class WebConfig implements WebMvcConfigurer {

@Override

public void addViewControllers(ViewControllerRegistry registry) {

// 匹配不含 "." 的路径(避免拦截静态资源)

registry.addViewController("/{path:[^\\.]*}")

.setViewName("forward:/index.html");

}

}

3. 数据验证(正则表达式)

python

运行

import re

# 验证手机号码

pattern = r"^1[3-9]\d{9}$"

is_valid = re.match(pattern, "13800138000")

注意事项

通配符与正则表达式的区别:

文件系统通配符(如 *、?)功能简单,仅用于基本匹配。正则表达式(如 .*、\d)功能强大,支持复杂模式匹配。

贪婪与非贪婪匹配:

.* 是贪婪的,会匹配尽可能多的字符。.*? 是非贪婪的,会匹配尽可能少的字符。

转义字符:

在正则表达式中,特殊字符(如 .、*)需要用 \ 转义。例如:

python

运行

# 匹配 .com 域名

pattern = r"\.com$"

总结

通配符是一种高效的匹配工具,根据场景选择合适的通配符:

文件搜索:使用 *、?、[]。正则表达式:使用 .、*、+、^、$ 等。网络路径:使用 *、**、{}。