正则表达式自我复习
来源:互联网 发布:逻辑思维和编程 编辑:程序博客网 时间:2024/06/05 09:27
^word:匹配以word打头的字符串;
word$:匹配以word结尾的字符串;
^word$:匹配word本身;
二、重复次数
ab*:匹配串中,ab(其中b可以为0-n个)
ab+:匹配串中,ab(其中b可以为1-n个)
ab?:匹配串中,ab(其中b可以为0-1个)
{n,m},对上面3种重复的通用模式,其中逗号和m可为空,如{n}、{n,}
三、或、[]、()
¦:代表或者,比如:"(b¦cd)ef":表示"bef"或"cdef";"(a¦b)*c":表示一串"a""b"混合的字符串后面跟一个"c";
():一般给或配合使用
[]:[ab]===(a|b),中括号代表的是一个字符。[a-d]===(a¦b¦c¦d)===[abcd]
中括号中还有一种特殊用法,可以用^代表非
四、特殊字符
. 代表除换行符以外任何一个字符,比如"^.{3}$":表示有任意三个字符的字符串(长度为3个字符)
\w 匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'。
\s 匹配任意的空白符(大写代表相反)
\d 匹配数字(大写代表相反)
\b 匹配单词的开始或结束(大写代表相反)
五、匹配模式:
1、贪婪模式:(默认),最大范围的匹配
2、勉强模式:最小范围的匹配,?号
3、占用模式:也是最大范围的匹配,但是匹配到后,不让出来了,会导致后续的匹配字符也匹配不到 。 + 号
再看下面一个例子:贪婪模式与侵占模式的比较
正则:\w+[a-z]与\w++[a-z]
目标串:232hjdhfd7474$
分析:①\w+[a-z]:\w+属于贪婪模式,会一次性吃掉它所能吃掉的所有的字符,也就是子串232hjdhfd7474,此时[a-z]不能够找到匹配了,故\w+匹配的串会吐出一个字符4,但此时还是得不到匹配。反复的这样吐出回退,直到吐出字符d时,此时[a-z]能够匹配h,所以这时正则表达式会返回一次成功的匹配结果,为232hjdhfd
②\w++[a-z]:\w++属于侵占模式,它会一次性吃掉它所能够吃掉的所有字符,即子串232hjdhfd7474,而且不留给其他部分使用,故不会回退。此时[a-z]不能够找到匹配,所以此次匹配失败。在余下的子串中也找不到能匹配成功的子串。所以整个正则表达式是找不到匹配结果的!
实战(查找程序代码):
正则:
<div data-options="region:'north',border:false,collapsed:false" class="page-title" style="overflow:hidden">[\s\S]*导出Word"></span>([\s\S]*?</div>){2}
被查找对象:
<div data-options="region:'north',border:false,collapsed:false" class="page-title" style="overflow:hidden"><div class="page-toolbar" style="padding-bottom: 5px;"><span onclick="export_file()" class="fa fa-file-excel-o" style="font-size: 28px;cursor: pointer;" title="导出Excel"></span><span class="fa fa-file-pdf-o" style="font-size: 28px;cursor: pointer;" title="导出PDF"></span><span class="fa fa-file-word-o" style="font-size: 28px;cursor: pointer;" title="导出Word"></span></div></div>
六、零宽断言:
1、(?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion)
代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern。
如:(?=pattern) abc 代表匹配abc的同时,abc的后面必须有符合pattern的串;
2、(?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion)
代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配pattern。
如:(?!pattern) abc 代表匹配abc的同时,abc的后面不能有符合pattern的串;
3、(?<=pattern) 零宽正向后行断言(zero-width positive lookbehind assertion)
代表字符串中的一个位置,紧接该位置之前的字符序列能够匹配pattern。
如:(?<=pattern) abc 代表匹配abc的同时,abc的前面必须有符合pattern的串;
4、(?<!pattern) 零宽负向后行断言(zero-width negative lookbehind assertion)
代表字符串中的一个位置,紧接该位置之前的字符序列不能匹配pattern。
如:(?<!pattern) abc 代表匹配abc的同时,abc的前面不能有符合pattern的串;
- 正则表达式自我复习
- 正则表达式复习
- 每日复习正则表达式
- 正则表达式复习笔记
- 正则表达式的复习
- 正则表达式复习--正则语法
- Java基础复习:正则表达式
- python正则表达式复习1
- python正则表达式复习2
- python正则表达式复习3
- python正则表达式复习4
- 再次复习java正则表达式
- Java复习之正则表达式
- 正则表达式复习+python使用正则
- 自我感觉良好的正则表达式
- 正则表达式复习与smarty安装
- php知识点复习之正则表达式
- 每天一点正则表达式复习(一)
- HDUOJ 2047
- for循环
- 【java学习】异常
- [VIJOS1456]最小总代价
- 精品绘画在线学习平台轻微课教程目录
- 正则表达式自我复习
- HTML03-表单
- Java递归实现整数各位求和
- HDU
- docker:搭建单机redis主从集群
- C语言之贪心算法(背包问题)
- codeforces 864C Marco and GCD Sequence
- 稀疏矩阵三元组的操作
- Redis开发实例(3)-List