文档章节

正则表达式

l
 liuzhihe
发布于 2016/12/07 14:45
字数 995
阅读 4
收藏 0

1:什么事正则表达式

    正则表达式是一种特殊的字符串模式,用于匹配一组字符串

2:正则表达式简单介绍

    2.1:元字符介绍

        "^" :^会匹配行或者字符串起始位置

        “$”:$会匹配行或者字符串的结尾位置

        "\b":常用与匹配单词的边界不会消耗(代表)任何字符“This is Reg” 正则\bis\b会匹配到is不会匹配两边的空格       

        " \d":匹配数字

        "\w":匹配字母,数字,下划线

        "\s":匹配空格

        ".":匹配除换行符以外的任何字符

        "[]":自定义匹配元素集合,将匹配[]里面定义的元素集合,如[abc]表示匹配 a或b或c,[a-z]表示匹配a-z的字母

    2.2反义匹配

        将小写换为大写刚好意思表示相反

        “\D”:表示匹配非数字的字符

        “\W”:表示匹配非字母数字下划线字符

        “\S”:表示匹配费空格的字符

        “\B”:表示匹配非单词开头和结尾的者位置

        “[^]”:表示匹配非自定义元素的字符 如:[^abc]表示匹配不是a或b或c的任意字符

    2.3懒惰次数限定符

        “*”:表示前一字符重复零次或者多次及前一字符出现>=0次

        “+”:表示前一字符重复一次或者多次及前一字符出现>=1次

        “?”:表示前一字符出现零次或者一次

        "{n}":表示前一字符出现n次

        “{n,m}:”表示前一字符出现n到m次

        “{n,}”:表示前一字符出现n次或以上

    2.4 贪婪

        贪婪贪心如*会首先匹配整个字符串,尝试匹配时会选定尽可能多的内容,如果失败会回退一个字符,直到匹配到内容或者没有字符可以回退

  如:a*b匹配字符串ahjhjhbjkjkjkjkjajkjkjkjbkjkjkjkjkjkjauiuiuiuijjkhb 匹配结果为ahjhjhbjkjkjkjkjajkjkjkjbkjkjkjkjkjkjauiuiuiuijjkhb而不是ahjhjhb  ajkjkjkjb  auiuiuiuijjkhb三个结果原因就在于正则匹配为懒惰模式 如果相匹配出来三个结果方法见2.5懒惰限定符或者后面的模式修正符

    2.5懒惰限定符

        “*?”:重复人依稀但每次尽可能的少

        如“”a*b匹配字符串ahjhjhbjkjkjkjkjajkjkjkjbkjkjkjkjkjkjauiuiuiuijjkhb 匹配结果为ahjhjhb  ajkjkjkjb  auiuiuiuijjkhb三个

        “+?”:复1次或更多次,但尽可能少重复使用结果同“*?”

        "??"  重复0次或1次,但尽可能少重复

        如正则a.??b匹配aaaacb结果为acb

        "{n,m}?"  重复n到m次,但尽可能少重复

        如正则a{1,5}?匹配aaaaaa结果为空

        "{n,}?"    重复n次以上,但尽可能少重复

        如:a{1,}?匹配aaaaaaa结果为7个a

    2.6捕获分组

        捕获分组的概念:捕获分组就是一个括号内的内容,“(\d)而"(\d)" 这就是一个捕获分组,可以对捕获分组进行 后向引用 (如果后而有相同的内容则可以直接引用前面定义的捕获组,以简化表达式)如(\d)\d\1 这里的"\1"就是对"(\d)"的后向引用那捕获分组有什么用呢看个例子就知道了。

        如:“hello hello” 正则 \b(\w+)\b\s\1\b 所以这里的"\1"所捕获到的字符是(\w+)匹配的结果"hello" 匹配结果为hello hello  若匹配“hello hell1”则匹配不成功

     “\b(?<name>\w+)\b\s\k<name>\b”用“?<name>”就可以自定义组名向后引用 后面使用"\k<name>"表示对前面的引用,而后捕获组中匹配的值就会保存到自定义的组名中       

        捕获分组的用法

        “(exp)”:匹配exp并将捕获的文本自动命名组里面

        "(?<name>exp)":匹配exp将结果到名称name组里面

        "(?:exp)":匹配exp但不给出分组的组号

        "(?=exp)":匹配exp前面的位置

        "(?<=exp)":匹配exp后面的位置

        "(?!exp)":匹配后面跟的不是exp的位置

        "(?<!)":匹配前面不是exp的位置

© 著作权归作者所有

共有 人打赏支持
l
粉丝 0
博文 25
码字总数 8731
作品 0
私信 提问

暂无文章

【PG内核】事务ID冷冻简述

数据库代码中事务ID的类型TransactionId定义为:typedef uint32 TransactionId。因此事务ID最大值为2^32-1=4294967295。 事务ID是需要循环使用的,为了做到这一点,数据库在做vacuum时将很老...

movead
24分钟前
13
0
深入学习SpringMVC以及学习总结

一、优点: 1.SpringMVC简化web程序开发; 2.SpringMVC效率很好(单例模式); 3.SpringMVC提供了大量扩展点,方便程序员自定义功能; 如果想学习Java工程化、高性能及分布式、深入浅出。微服...

编程SHA
24分钟前
1
0
关于开源分布式事务中间件Fescar,我们总结了开发者关心的13个问题

开源分布式事务中间件 Fescar 自1月10日上线v0.1版本以来,受到了开发者们的极大关注(watch249,star3005,fork649,社区讨论的issue58,数据统计于1月17日14:00),可见,天下苦分布式事务...

阿里云官方博客
25分钟前
1
0
斯皮格尔:我们敢于采纳非常疯狂的创意

“阅后即焚”照片分享应用 Snapchat 母公司 Snap 的 CEO 埃文-斯皮格尔(Evan Spiegel)近日接受了英国《金融时报》记者的采访,谈到了该公司的未来发展,与社交网络 Facebook 的竞争,限制自己...

linuxCool
26分钟前
1
0
javaweb文件上传以及文件上传成功后但是目录中没有显示

经过看别人写的代码然后自己实际操作一遍,基本都是搬运也是为了练习。1:创建fileUpLoad.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UT......

小橙子的曼曼
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部