正则表达式

正则表达式(Regular Expression)是一种用于匹配、搜索或操作文本的强大工具,通过定义模式来匹配字符串中的特定内容。以下是正则表达式的核心语法和常见用法,分为基础和进阶部分:


一、基础语法

1. 字符匹配
  • 普通字符:直接匹配对应字符(如 a1@)。
  • 特殊字符(需转义 \):
    . * + ? ^ $ \ | ( ) [ ] { }


    例如:\. 匹配字面意义的点号。

2. 字符类(Character Classes)
  • 匹配任意一个字符
    • .:匹配除换行符外的任意字符。
    • [abc]:匹配 ab 或 c
    • [^abc]:匹配 abc 的字符。
    • [a-z]:匹配任意小写字母。
    • [0-9]:匹配任意数字(等同于 \d)。
3. 量词(Quantifiers)
  • *:匹配前一个字符 0 次或多次(如 a* 匹配 ""aaa)。
  • +:匹配前一个字符 1 次或多次(如 a+ 匹配 aaa)。
  • ?:匹配前一个字符 0 次或 1 次(如 a? 匹配 "" 或 a)。
  • {n}:匹配前一个字符 恰好 n 次(如 a{3} 匹配 aaa)。
  • {n,}:匹配前一个字符 至少 n 次(如 a{2,} 匹配 aaaaa)。
  • {n,m}:匹配前一个字符 n 到 m 次(如 a{1,3} 匹配 aaaaaa)。
4. 锚点(Anchors)
  • ^:匹配字符串的开头(如 ^Hello 匹配 "Hello world" 中的 Hello)。
  • $:匹配字符串的结尾(如 world$ 匹配 "Hello world" 中的 world)。
  • \b:匹配单词边界(如 \bcat\b 匹配 "cat" 但不匹配 "category")。
5. 分组与捕获
  • ( ):分组并捕获匹配内容(如 (ab)+ 匹配 abab,并捕获 ab)。
  • (?: ):分组但不捕获(如 (?:ab)+ 不捕获分组内容)。

二、进阶语法

1. 或操作(Alternation)
  • |:匹配左侧或右侧的表达式(如 cat|dog 匹配 "cat" 或 "dog")。
2. 转义字符
  • \d:匹配任意数字(等同于 [0-9])。
  • \w:匹配字母、数字或下划线(等同于 [a-zA-Z0-9_])。
  • \s:匹配空白字符(空格、制表符、换行符等)。
  • \D\W\S:分别匹配 \d\w\s 的补集。
3. 贪婪与非贪婪匹配
  • 贪婪模式(默认):量词匹配尽可能多的字符(如 a.+b 匹配 "aabab" 中的 "aabab")。
  • 非贪婪模式:在量词后加 ?(如 a.+?b 匹配 "aabab" 中的 "aab" 和 "ab")。
4. 回溯引用(Backreferences)
  • \1\2:引用前面捕获的分组(如 (\d)\1 匹配 "22""33")。
5. 环视(Lookaround)
  • 正向肯定环视 (?= ):匹配后面满足条件的字符串(如 a(?=b) 匹配 "ab" 中的 a)。
  • 正向否定环视 (?! ):匹配后面不满足条件的字符串(如 a(?!b) 匹配 "ac" 中的 a)。
  • 反向环视:类似,但检查前面的内容((?<= )(?<! ))。

三、常用正则示例

  1. 匹配邮箱
    ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
    
    
  2. 匹配日期(YYYY-MM-DD)
    
    
    ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$

  3. 匹配手机号(中国)
    
    
    ^1[3-9]\d{9}$

  4. 移除多余空格
    \s+  // 替换为单个空格
    
    

四、工具与测试

  • 在线测试工具Regex101RegExr
  • 编程语言支持
    • Python:re 模块(如 re.search(r'\d+', '123'))。
    • JavaScript:RegExp 对象(如 /a+/g.test('aaa'))。
    • Java:Pattern 和 Matcher 类。

五、注意事项

  1. 性能问题:复杂的正则可能导致回溯爆炸(如 (a+)+b 匹配 "aaaaaaaa!" 时)。
  2. 可读性:优先使用清晰的代码逻辑,而非过度复杂的正则。
  3. 转义差异:不同语言对正则的转义规则可能不同(如 Python 中需用 r'\d' 避免转义)。

掌握正则表达式需要结合实践,建议从简单模式开始,逐步尝试复杂场景!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值