正则表达式

正则表达式

Wreckloud_雲之残骸 Lv4

正则表达式是用特殊字符组合描述文本规则的强大工具.
在 Java 中,正则表达式是通过 str.matches(正则表达式规则) 来实现的。

以下是核心语法和案例:

[] 中括号表达式

匹配中括号中的任意一个字符.

  • [a-z]  表示字母 a 到 z 的范围
  • [^abc]  表示排除 a/b/c 的任意字符
  • ^  在中括号内表示”排除”
1
2
3
4
5
6
// 匹配单个元音字母
System.out.println("a".matches("[aeiou]")); // true
// 匹配非数字字符
System.out.println("k".matches("[^0-9]")); // true
// 匹配 1 个大写字母或数字
System.out.println("A".matches("[A-Z0-9]")); // true

\ 转义字符与元字符

转义字符将其后紧跟的字符标记为有特殊含义的元字符(Metacharacter)

元字符 作用 Java 正则写法
. 匹配任意字符(除换行符) \\.
\d 匹配数字 \\d
\D 匹配非数字 \\D
\w 匹配字母、数字、下划线 \\w
\W 匹配非单词字符 \\W
\s 匹配空格、制表符等 \\s
\b 匹配单词边界 \\b
1
2
3
4
5
6
// 检查字符串是否为 3 位数字
System.out.println("123".matches("\\d{3}")); // true
// 判断是否包含非数字字符
System.out.println("a1".matches(".*\\D.*")); // true
// 匹配以 "cat" 结尾的单词(需用 \\b 表示边界)
System.out.println("bobcat".matches(".*\\bcat")); // true

限定符

1. 模糊限定符

符号 作用 示例
* 匹配 0 次或多次 a*
+ 匹配 1 次或多次 \\d+
? 匹配 0 次或 1 次 xyz?
1
2
3
4
5
6
// 匹配以 a 开头,后跟 0 或多个 b 的字符串
System.out.println("abbb".matches("ab\*")); // true
// 匹配至少 1 位数字
System.out.println("7".matches("\\d+")); // true
// 匹配 "http" 或 "https"
System.out.println("https".matches("https?")); // true

2. 精确限定符

符号 作用 示例
{n} 匹配恰好 n 次 a{3}
{n,} 匹配至少 n 次 \\d{2,}
{n,m} 匹配至少 n 次,至多 m 次 a{2,4}
1
2
3
4
5
6
// 匹配 3 位区号 + 8 位数字的电话号码
System.out.println("010-12345678".matches("\\d{3}-\\d{8}")); // true
// 匹配 2~4 个连续字母 a
System.out.println("aaa".matches("a{2,4}")); // true
// 匹配至少 5 位数字
System.out.println("12345".matches("\\d{5,}")); // true

综合案例

  1. 邮箱格式验证
1
2
String regex = "[a-zA-Z0-9]+@[a-z]+\\.[a-z]{2,3}";
System.out.println("test@mail.com".matches(regex)); // true
  1. 日期格式验证(YYYY-MM-DD)
1
2
String regex = "\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])";
System.out.println("2023-10-05".matches(regex)); // true
  • 标题: 正则表达式
  • 作者: Wreckloud_雲之残骸
  • 此记初现于 : 2024-06-23 14:56:24
  • 此记变迁于 : 2025-02-20 17:21:16
  • 链接: https://www.wreckloud.com/2024/06/23/猎识印记-领域/编程语言/正则表达式/
  • 版权声明: 本幽影记采用 CC BY-NC-SA 4.0 进行许可。
影踪语