正则表达式

1. 基础量词

符号含义示例匹配示例
?前一个字符0次或1次colou?r"color", "colour"
*前一个字符0次或多次go*gle"ggle", "google", "gooogle"
+前一个字符1次或多次go+gle"google", "gooogle" (不匹配"ggle")

2. 分组与选择

表达式含义示例匹配示例
(cat|dog)匹配"cat"或"dog"I have (cat|dog)"I have cat", "I have dog"
a (cat|dog)匹配"a cat"或"a dog"同上同上

3. 字符类

表达式含义示例匹配示例
[a-z]+1个或多个小写字母[a-z]+"abc", "hello"
[A-Z]单个大写字母[A-Z][a-z]*"Apple", "Banana"
[0-9]单个数字[0-9]{3}"123", "456"
.任意单个字符(除换行符)a.c"abc", "a c", "a.c"

4. 边界匹配

符号含义示例作用
^字符串开头^Hello匹配以"Hello"开头的字符串
$字符串结尾world$匹配以"world"结尾的字符串
\b单词边界\bcat\b匹配独立单词"cat"

5. 预定义字符类

表达式等价形式含义示例
\d[0-9]数字字符\d+ 匹配 "123"
\w[a-zA-Z0-9_]单词字符(字母数字下划线)\w+ 匹配 "user1"
\s[ \t\n\r\f]空白字符\s+ 匹配空白
\D[^0-9]非数字字符\D+ 匹配 "abc"
\W[^\w]非单词字符\W 匹配 "@"
\S[^\s]非空白字符\S+ 匹配 "text"

6. 量词范围

表达式含义示例匹配范围
{n}恰好n次a{3}"aaa"
{n,}至少n次\d{2,}"12", "123"
{n,m}n到m次[a-z]{2,4}"ab", "abcd"

7. 转义字符

符号说明示例匹配内容
\.匹配实际的点号example\.com"example.com"
\\匹配反斜杠C:\\"C:"
\?匹配问号really\?"really?"

综合示例

1. 邮箱验证
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  • 匹配:user@example.com

  • 不匹配:user@.com

2. 日期匹配
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
  • 匹配:2023-05-15

  • 不匹配:2023-13-01

3. HTML标签提取
<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)
  • 匹配:<div class="header">Content</div>


Java中使用示例

String text = "The cat and the dog are friends.";
Pattern pattern = Pattern.compile("\\b(cat|dog)\\b");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
    System.out.println("Found: " + matcher.group());
}
// 输出: 
// Found: cat
// Found: dog

易错点提醒

  1. 贪婪匹配.*会匹配到尽可能长的字符串,用.*?实现非贪婪匹配

  2. 分组引用:用( )捕获分组后,可用$1\1引用

  3. 特殊字符[ ] ( ) { } . * + ? ^ $ \ | 需要转义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值