正则表达式必知必会

正则表达式必知必会

读完了正则表达式必知必会( Regular Expressions in 10 Minutes )后写的一篇笔记,基本是按照书的架构总结的重点。但只是把这本书看过一遍并没有什么用,正则表达式还是要多实践才能比较好地掌握。

入门

作用:匹配 & 处理文本
区分大小写

匹配文本

基本字符:

  • . 字符:匹配任何一个单个的字符
  • \ 字符:转义字符
    • 字符:在 [ ] 中定义字符区间
  • [] 字符:[ 和 ] 字符,定义一个字符集合
    eg: [0-9], [a-z] ,[A-Z], [A-z]([A-z] 少用,因为A-z包括ASCII表里夹在A到z之间的所有字符)
  • ^ 字符:取非字符,紧跟在 [ ] 字符中的 [ 后面,作用于给定字符集合里所有的字符或者字符区间

元字符:

空白元字符说明
[\b]回退(并删除)一个字符( Backspace 键)
\f换页符
\n换行符
\r回车符
\t制表符( Tab 键)
\v垂直制表符
数字元字符说明
\d任何一个数字字符(等价于[0-9])
\D任何一个非数字字符(等价于[^0-9])
字母数字元字符说明
\w任何一个字母数字字符(大小写均可)或下划线字符(等价于[a-zA-Z0-9_])
\W任何一个非字母数字字符或下划线字符(等价于[^a-zA-Z0-9_])
空白字符元字符说明
\s任何一个空白字符(等价于[\f\n\r\t\v])
\S任何一个非空白字符(等价于[^\f\n\r\t\v])

重复匹配

    • 匹配一个或多个字符
    • 匹配零个或多个字符
  • ? 匹配零个或一个字符
  • {次数} 匹配任意次数的值

    {n,m} 匹配区间,至少 n 次,至多 m 次,若省略则为∞


*
贪婪型匹配懒惰型匹配
最大长度匹配非最大长度匹配
**?
++?
{n,}{n,}?

位置匹配

  • \b 匹配一个位于【一个能够用来构成单词的字符(字母、数字和下划线,也就是与 \w 相匹配的字符)】和【一个不能用来构成单词的字符(也就是与 \W 相匹配的字符)】之间的位置,即单词边界
  • \B 匹配非单词边界
  • ^ 定义字符串开头
    eg:^\s*?<\?xml.*\?> 这个正则表达式将匹配字符串开头处的

子表达式

用(和)括号括起来的表达式,称为子表达式,视为一个独立元素。
  • (子表达式){1,4} 子表达式的多次连续重复查找
  • 避免歧义。如查找一个四位年份 19|20\d{2} 会导致查找 19 或 20xx 这两种类型的数据,正则表达式应该改为 (19|20)\d{2}
  • 子表达式的嵌套。

回溯引用

回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式,像引用变量一样调用,在后半部分和前半部分之间建立了关联。

格式:\1 反斜杠加数字,数字代表模式中要引用子表达式的排序
如 ([1-6]).*?\1 这里的 \1 指的就是第一个子表达式即 [1-6] 匹配到的值

应用:对文本进行格式修改(通过查找表达式和替换表达式中 \ 和 $ 的对应回溯引用实现)

元字符说明
\E结束 \L 或 \U 转换
\l把下一个字符转换为小写
\L把 \L 到 \E 之间的字符全部转换为小写
\u把下一个字符转换为大写
\U把 \U 到 \E 之间的字符全部转换为大写

前后查找

向前查找(lookahead) & 向后查找(lookbehind)
指定一个必须匹配但不在结果中返回的模式
向前查找 (?=)
向后查找 (?<=)

均需要用子表达式与其他内容分隔开

负向前查找 (?!)
负向后查找 (?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值