zoukankan      html  css  js  c++  java
  • 正则表达式

    正则表达式: 用来描述符合某种模式(具有某种特征)的一类字符串的表达式.

    正则表达式的组成

    • 普通字符: 即普通的字符 (如abcd!@#$等等,这个不需要介绍)
    • 元字符: 具有特殊描述功能的字符 (如.*1|等等,重点是这个)

    元字符

    元字符主要有以下几类

    1.特殊字符(不显示的字符)

    元字符 含义
    a 警报
     退格, 单词边界
    e ESC字符
    f 进纸符
    换行符
    回车符
    水平制表符
    v 垂直制表符

    2.不确定范围的字符组

    所谓字符组,就是包含一组特定字符,但只从中选一个.

    我的理解是: 在[]中指定一个范围, 从中任意匹配一个

    字符 含义
    [abc] 匹配一个a,b ,c中的任意一个字符
    [a-z] 匹配一个从a到z中的任意一个字符
    [^abc] 匹配一个非a,b,c中的任意一个字符
    [^a-z] 匹配一个不在a到z之中的字符
    [[a-z]-[abc]] 字符组减法
    [[a-z] && [ ^abc]] 字符组集合运算

    注意,

    普通字符组[]内其他部分元字符 不起作用,如[.]并不会匹配任意一个字符,而是匹配符号.

    普通字符组[]内的d, w还是可以使用的

    普通字符组内要匹配-,必须写在最前面,如[-abc]

    3.确定范围字符组

    范围明确,不需要你指定的字符组, 返回一个满足条件的字符

    符号 含义
    . 匹配任意字符
    d 匹配一个数字
    D 匹配一个非数字
    w 匹配一个单词字符, 即一个数字或字母
    W 匹配一个非单词字符
    s 匹配一个空白字符
    S 匹配一个非空白字符

    4.限定(数量)字符

    不匹配任意一个字符,放在匹配表达式后面,用来描述前面表达式的数量

    字符 含义 举例 例子解释
    * 匹配前面的子表达式零次或多次,即 a* a出现0次或多次
    + 匹配前面的子表达式一次或多次 a+ a至少出现一次
    ? 匹配前面的子表达式零次或一次 a? a出现一次或者不出现
    {n} 匹配确定的 n 次 a{5} a必须出现5次
    {n,} 至少匹配 n 次 a{99,} a至少出现99次
    {n,m} 最少匹配 n 次且最多匹配 m 次 a{5,10} a出现5到10次

    5.位置元字符

    字符 含义
    ^ 匹配 行/字符串 开始的位置
    A 匹配文本起始位置,即第一行开头
    $ 匹配 行/字符串 的结尾
     匹配文本结束位置
     单词边界
    B 非单词边界
    G 上一次匹配结束的位置
    (?= 指定内容 ) 肯定顺序环视,匹配指定内容前面的位置
    (?! 指定内容) 否定顺序环视, 匹配非指定内容前面的位置
    (?<=指定内容) 肯定逆序环视, 匹配指定内容后面的位置
    (?<!指定内容) 否定逆序环视,匹配非指定内容后面的位置
    (?<=指定内容1)(?=指定内容2) 匹配指定内容1之后,指定内容2之前的位置

    把 1234567变成"1,234,567",可以用"(?<=d)(?=(ddd)+(?!d)) "来寻找,的位置.


    捕获和引用

    符号 含义
    (指定内容) 捕获括号,指定内容匹配成功后,内容被括号捕获,可以引用
    1,2, …, 引用, 指定捕获的组号来引用内容, 组号从1开始
    (?:指定内容) 非捕获括号, 即使指定内容被捕获, 内容也不参与捕获
    (?p<指定名字>指定内容) 给分组命名,引用时用()
    (?>指定内容) 固化分组, 简单来讲一直匹配直到不符合条件,且不归还内容
    (指定内容1 指定内容2

    对于捕获和引用, 如在串"12345678900"中,

    搜索: (d{3})(d{8}) 替换为: 1112 ,其中2为组号 ,结果为"1112345678900"


    贪婪模式和非贪婪模式

    贪婪模式,就是在整个表达式匹配成功的前提下,尽可能多的匹配

    非贪婪模式,就是在整个表达式匹配成功的前提下,尽可能少的匹配.

    如在’‘bbb>’'中匹配"<w*>"

    贪婪匹配得到: ‘‘bbb>’’; 非贪婪匹配得到: ‘’"

    默认匹配为贪婪匹配, 直接使用 * , + 等符号

    非贪婪匹配加"?": 如+?, *?

    在"abbb"中匹配"ab+", 为贪婪匹配, 得"abbb".

    在"abbb"中匹配"ab+?", 为非贪婪匹配, 得"ab".


    注释和模式修饰词

    表示 含义
    (?i:指定内容) 匹配指定内容,不区分大小写
    (?x:指定内容) 宽松排列和注释模式
    (?s:指定内容) 点号通配模式
    (?m:指定内容) 增强的行锚点模式
    (?#指定内容) 注释

    1. ↩︎

  • 相关阅读:
    算法53----换钱的最小次数和方法数【动态规划】
    算法52-----矩阵最小路径【动态规划】
    Data
    Git
    Git
    Git
    Git
    DevOps
    Docker
    Tools
  • 原文地址:https://www.cnblogs.com/lee3258/p/11997780.html
Copyright © 2011-2022 走看看