• 正则表达式


    1、概念:
    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。换句话说,正则表达式就是记录文本规则的代码。

    正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本

    正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。

    1)、元字符
    元字符就是指那些在正则表达式中具有特殊意义的专用字符。可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

    .       匹配除换行符以外的任意字符
    w    匹配字母或数字或下划线或汉字
    s     匹配任意的空白符,匹配任意的空白符(包括空格、制表符(Tab)、换行符、中文全角空格等)
    d     匹配数字
         匹配单词的开始或结束
    ^      匹配字符串的开始
    $      匹配字符串的结束

    *      代表的不是字符,也不是位置,而是数量。它指定*前边的内容可以连续重复使用任意次(可能是0次)以使整个表达式得到匹配

    .*     匹配任意数量的不包含换行的字符

    +     匹配重复1次或更多次

    2)、字符转义
            取消字符的特殊意义

    3)、重复

    限定符,即指定数量的代码

    *        重复零次或更多次
    +       重复一次或更多次
    ?       重复零次或一次
    {n}     重复n次
    {n,}    重复n次或更多次
    {n,m}    重复n到m次

    4)、分枝条件
    分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用 | 把不同的规则分隔开,但要注意各个条件的顺序

    5)、分组(子表达式)
    重复多个字符,可以用小括号 () 来指定分组。
    默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

    常用分组语法

    捕获
    (exp)        匹配exp,并捕获文本到自动命名的组里
    (?<name>exp)      匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
    (?:exp)       匹配exp,不捕获匹配的文本,也不给此分组分配组号


    零宽断言
    (?=exp)      匹配exp前面的位置
    (?<=exp)    匹配exp后面的位置
    (?!exp)       匹配后面跟的不是exp的位置
    (?<!exp)     匹配前面不是exp的位置


    注释
    (?#注释内容)     这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

    6)反义
    W 匹配任意不是字母,数字,下划线,汉字的字符
    S 匹配任意不是空白符的字符
    D 匹配任意非数字的字符
    B 匹配不是单词开头或结束的位置
    [^x] 匹配除了x以外的任意字符
    [^aeiou] 匹配除了aeiou这几个字母以外的任意字符

    7)、后向引用
    用于重复搜索前面某个分组匹配的文本

    8)、零宽断言
    只有当断言为真时才会继续进行匹配
    零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西

    (?=exp)     也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp
    (?<=exp)    也叫零宽度正回顾后发断言

    9)、负向零宽断言

    10)、注释
    (?#注释内容)

    11)、贪婪与懒惰
    贪婪匹配:匹配尽可能多的字符
    懒惰匹配:匹配尽可能少的字符。

    正则表达式默认贪婪匹配,由贪婪匹配转化为懒惰匹配在后面加上一个问号 ?

    懒惰限定符
    *?     重复任意次,但尽可能少重复
    +?     重复1次或更多次,但尽可能少重复
    ??      重复0次或1次,但尽可能少重复
    {n,m}?     重复n到m次,但尽可能少重复
    {n,}?      重复n次以上,但尽可能少重复

    12)、平衡组/递归匹配

  • 相关阅读:
    接收短信
    linux 中统计相同序列出现的次数
    linux 中 vmware如何扩展磁盘大小
    pindel软件的基本用法
    如何解决vim 编辑器注释行后面字符开不清
    linux中basename命令
    linux 中 利用命令向文件的末尾添加空行
    普通用户调整vim编辑器配置
    利用samtools软件将sam文件转换为bam文件
    linux 中 date +%s 获取1970年以来的秒数
  • 原文地址:https://www.cnblogs.com/Python1/p/9135235.html
Copyright © 2020-2023  润新知