快速学会正则表达式

正则表达式

元字符
元字符说明
.匹配出换行符以外的任意字符
\w匹配字母、数字、下划线
\s匹配任意的空白字符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
反义元字符
语法说明
\W匹配不是字母、数字、下划线
\S匹配人意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配出了aeiou以外的任意字符
匹配 . 、? 等转义字符时

\. 匹配.

? 匹配?

正则表达式注释

需要忽略模式中的空白符

通过#xxx 完成注释,也可以换行更好的查看每一小节的作用

正则表达式重复
语法说明
*重复零次或更多次
+重复一次或更多次
重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

字符类

[0-9] \d

[a-z0-9A-Z_] \w

[&?.] 标点符号

\(?0\d{2}[)-]?\d{8}) (02155555555、 012-12345678、 (012)12345676

分组
  • 将子表达式进行做成子集

  • 使用()进分组

  • 方便对match的字符串进行划分

  • exp = (\d{1,3}\.){3}\d{1,3} 120.169.168.125

  • 分组命名:(?exp)

  • (?:exp) 匹配exp,不捕获匹配的文本,也不给次分组分配组号

    匹配bilibili视频标题:

    <div\s+class=“info”.*?<div\s+class=“headline clearfix”>.*?<span\s+class=“type\s+hide”>(?:.*?).?<a.?>(?.*?)

贪婪与懒惰
  • 贪婪 a.*b
  • 懒惰 a.*?b
语法说明
*?重复任意次,尽可能少重复
+?重复1次或更多次,尽可能少重复
??重复0次或一次,尽可能少重复
{n,m}?重复n到m次,尽可能少重复
{n,}?重复n次以上,尽可能少重复
处理选项
语法说明
IgnoreCase匹配时不区分大小写
Multiline更改^和$的含义,使他们分别在任意一行的
行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配
Singleline更改.的含义,时他与每一个字符匹配(包括换行符\n)
IngorePatternWhitespace忽略表达式中的非转义空白并启用有#标记的注释
ExplicitCapture仅捕获已被显式命名的组
后向引用

匹配taobao taobao,home home这样的情况

  • \b(\w+)\b\s+\1\b
  • \b(?\w+)\b\s+\k\b
零宽断言
  • ?=exp 零宽度正预测先行断言,自身出现的未知的后面能匹配表达式exp

    \b\w+(?=ing\b)

    I’m singing while you’re dancing.

  • ?<=exp 零宽度正回顾后发断言,自身出现的位置的前面能匹配表达式exp

    (?<=\bre)\w+\b

    reading a book

负向零宽断言

查找这样的单词–他后面出现了字母t,但是t后面跟的不是字母u

\b\w*t[^u]\w*\b 不支持 request

需要使用零宽断言负预测先行断言

\b\w*t(?!u)\w*\b

平衡组/递归匹配(C#支持,Java8不支持)
  1. 如何把xx <aa aa> yy这样的字符串里最长的配对尖括号内的内容捕获出来
  2. (?‘group’)把捕获的内容命名为group,并压入堆栈(stack)
  3. (?’-group’)从堆栈上弹出最后压入堆栈的名字为group的捕获内容,若果堆栈本来为空,则本组的匹配失败
  4. (?(group)yes|no)如果堆栈上存在以名为group的捕获内容,继续匹配yes部分的表达式,否则匹配no部分
  5. (?!)零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败
<#最左外层的左括号
    [^<>]*                #最外层的左括号后面的不是括号的内容
    (
        (
            (?'Open'<)    #碰到了左括号,在黑板上写一个"Open"
        |
            (?'-Open'>)   #碰到了右括号,擦掉一个“Open“
        |
            [^<>]*        #匹配右括号后面不是括号的内容
        )+
    )*
    (?(Open)(?!))         #在遇到最外层的右括号前面,判断黑板上还有没有没有擦掉的“Open”:若果还有,匹配失败
>                         #最外层的右括号
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值