正则表达式学习总结

正则表达式 学习总结

意义:判断一个字符序列是否与一个模板匹配
使用建议:及时备份
匹配原则:匹配之间互不覆盖,即在文本12345中使用\d{3}只找到123

使用环境

工具

1.cmd
查询版本findstr /?
查询文本find /N(行号) (正则表达式) *.*(文件名 支持正则表达式)
注:cmd 仅支持少量正则表达式语法

2.WPS/Microsoft Word(Excel…) /…
CTRL F
注:仅支持通配符? *

3.Open Office.org Writer

4.Notepad++/Sublime text/…

语言

1.Java/Java Script (RegExp/String 实现)
2.VB Script
3.Visual Basic .NET
4.C#
5.Perl
6.My SQL/SQL Server 2000

元字符

直接匹配

carcar

限定字符

1.?字符
块?:块中内容可以匹配或不匹配(尽可能匹配)
例:colou?r'?color;colour;color';colour'
匹配?\?

2.*字符
块* :块中内容可以不匹配,也可以匹配多次(尽可能匹配)
例:colo*rcolr;color;coloor;colooooooor
匹配*\*

3.+字符
块+ :块中内容匹配至少一次(尽可能匹配)
例:colo+rcolor;coloor;colooooooor
匹配+\+

4.大括号语法
(1)块{n}:块中重复n次
(2)块{n,m}:块中重复n~m次
(3)块{n,}:块中重复n~+∞次

元字符

模板字符匹配字符
.几乎所有字符(存在版本区别)
\..
\w英文字母,汉字,希腊字母…;数字;下划线
\W除去\w字符
\d数字
\D除去\d字符
\s空格;制表符;换行符
\S除去\S字符
\t制表符
\n换行符
\\\
^A行首A
[^AB]非A and 非B
[ABC^D]A or B or C or ^ or D
\^^
A$行末A
\$$
\<A词首A
A\>词末A
\bA=\<A
A\b=A\>
\B非词的边界

匹配空行:^$
##字符类

模板匹配
[yieee2d]y or i or e or 2 or d
[C-Q];[t-x];[2-5]C~Q;t~x;2~5
\[;\][;]
[C-Qu-z3-9]C~Q or u~z or 3~9

注意:
1.慎用[A-z]:编码表不连续
2.慎用[4-3][c-a]:版本不同,意义不同
3.[.-/]不表示. or - or /,表示. ~ / —> [-./] or [-/.]
4.Java中支持&&:[A-Z&&[^B-D]]
5.部分支持[:alnum:][A-Za-z0-9]

圆括号与双向查找

圆括号的作用

1.对字符进行分块:使用限定符
(United)( )(States){3}

2.选择性
(A|B|DFF)A or B or DFF
注意:顺序匹配,即(a|ab)无法匹配ab(不覆盖原则) —>(ab|a)

3.捕获圆括号:参加编号的圆括号
(正则表达式)
编号规则:依据左括号出现的顺序从1开始
(A2){7}(B342){2}(C423(D2E2R){2}){5}
Python/.NET/… 语言支持对分出的组进行命名
Python (?P<华丽的名字>正则表达式)
.NET (?<华丽的名字>正则表达式) or (?'华丽的名字'正则表达式)

4.非捕获圆括号:不参加编号的圆括号
(?:正则表达式)

5.反向引用
\number:与分组number的字符一模一样
例:([A-Za-z])([t-y])\1\2可匹配形如TuTu eyey rxrx等,不可匹配uuyt

双向查找

模板|匹配
:-:|:—
fnoi2014xtx(?=\d{2})|只匹配后面紧邻两个数字的fnoi2014xtx
fnoi2014xtx(?!\d{2})|只匹配后面不紧邻两个数字的fnoi2014xtx
(?<=\d{2})fnoi2014xtx|只匹配前面紧邻两个数字的fnoi2014xtx
(?<!\d{2})fnoi2014xtx|只匹配前面不紧邻两个数字的fnoi2014xtx

注:匹配位置:(?<=S)(?=A)

贪婪 懒惰 占有

贪婪:首先匹配整个字符串,尝试匹配时选定尽可能多的内容,失败后回退
懒惰:从目标起始位置开始匹配,每次向后一个字符
占有:只尝试一次

限定符默认贪婪

限定符懒惰化
*? ; +? ; ?? ; {n,m}? ; {n,}?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值