文档章节

正则表达式

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

暂无文章

咕泡-Factory设计模式笔记

个人感悟: 设计模式都是处理复杂问题的,如果问题本身很简单,使用设计模式反而累赘,增加了开发的复杂性 遇到最简单的情况,直接 new 如果创建对象的过程简单,但是需要匹配不同情况,返回...

职业搬砖20年
19分钟前
0
0
Java中的锁分类

在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏...

Funcy1122
27分钟前
0
0
Ansible随机数

想为你的Ansible剧本取一个随机数?还想在接下来的运行中保持系统的等幂性?这里有一个答案。 假如,你要为一大批服务器设置cron任务,却不想让它们同时启动,你可以这样设置分钟数: minute...

大别阿郎
36分钟前
0
0
SpringCloud之服务注册中心Eureka

本系列介绍的配置均基于 Spring Boot 2.0.1.RELEASE 版本和 Spring Cloud Finchley.SR1 服务注册中心 Spring Cloud 已经帮我们实现了服务注册中心,我们只需要很简单的几个步骤就可以完成。 ...

熊小飞呀
今天
9
1
“Comparison method violates ...”异常的再现方法

前提条件:JDK8 代码: import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class Test { public stat......

hunterli
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部