正则表达式自我复习

来源:互联网 发布:逻辑思维和编程 编辑:程序博客网 时间: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的串;




原创粉丝点击