• 正则表达式


    正则表达式是文本处理极为重要的技术,1970年代,Unix之父Ken Thompson将正则表达式引入到Unix文本编辑器sed和grep中,由此正则表达式普及开来。

    1980年后,perl语言对Henry Spencer编写的库扩展了很多新的特性,1997年开始,Philip Hazel开发出了PCRE,被php和httpd等工具采用。

    正则表达式应用极其广泛,shell中处理文本的命令,各种高级编程语言都支持正则表达式。

    参考 https://www.w3cschool.cn/regex_rmjc/

    元字符(metacharacter)

    代码 说明 举例
    . 匹配除换行符外任意一个字符 .
    [xyz] 字符集合,只能表示一个字符位置,匹配所包含的任意一个字符 [xyz]匹配xvvz中的'xz'
    [^xyz] 字符集合,只能表示一个字符位置,匹配除去所包含字符的任意一个字符 [^xyz]匹配xvvz中的'vv'
    [a-z] 字符范围,也是一个集合,表示一个字符位置,匹配所包含的任意一个字符 [a-z][A-Z][0-9]
     匹配单词边界 b 匹配已b开头的字符
    B 匹配非单词边界 Bb 匹配不以b开头的含有b的单词
    d [0-9]匹配0-9之间的任意一个数字 d
    D [^0-9]匹配任意一个非数字的字符 D
    s 匹配一位空白字符,包括换行符,制表符,空格 s
    S 匹配一位非空白字符 S
    w 匹配[a-zA-Z0-9_]包括中文的字符 w
    W 匹配w之外的任意字符 W

    Linux下换行符是 ,win下换行符是

    单行模式

    .可以匹配所有字符,包括换行符

    ^表示整个字符串的开头,$表示整个字符串的结尾

    多行模式

    .可以匹配除了换行符之外的字符

    ^表示行首,$表示行尾

    ^表示整个字符串的开始,$表示整个字符串的结尾,开始指定的是 后紧接着下一个字符,结束指的是/n前的字符

    转义: \,  \表示

    重复

    代码 说明 举例
    * 表示前面的正则表达式会重复0次或多次 aw* 单词中有a然后后面是非空白字符
    + 表示前面的正则表达式重复至少一次 aw+ 单词中a后面至少有一个非空白字符
    表示前面的正则表达式会重复0次或1次 aw? 单词中a后面最多有一个空白字符
    {n} 重复固定的n次 aw{1}单词中a后面只能有一个非空白字符
    {n,} 重复至少n次 aw{1,}等价aw+ aw{0,}等价ew*aw{0,1}等价ew?
    {n,m} 重复至少n次,最多m次 aw{0,10}单词中a后面至少1个,至多10个非空白字符
    x|y 匹配x或者y w|food或者(w|f)ood,匹配wood或者food
    (pattern) 使用小括号指定一个分组,配好从1开始 (very)
    数字 匹配对应的分组 (very) 1
    (?:pattern) 改变优先级,不认为是分组 (:?very),不是分组不能用数字调用
    (?=exp) 断言exp一定在匹配的右边出现,一定有exp后缀 f(?=oo)f后面一定有oo出现,匹配是f而不是oo
    (?<=exp) 断言exp一定在匹配的左边出现,一定有exp前缀 (?<=t)ook,匹配ook前面一定有t出现,匹配ook
    (?!exp) 断言后面一定不是exp too(?!d),匹配too后面不是d的too
    (?<!exp) 断言前面一定不是exp (?<!f)ood 匹配ood左边不是f的ood

    断言不占分组号

    正则表示工作在贪婪模式中,默认匹配更长的字符,非贪婪模式需要在符号前面加一个?,表示尽量少的匹配

    代码 说明
    *? 匹配任意次,尽可能的少匹配
    +? 匹配至少一次,尽可能的少重复匹配
    ?? 匹配0次或者1次,尽可能的少重复匹配
    {n,}? 匹配至少n次,尽可能的少重复
    {n,m}? 匹配至少n次,至多m次,尽可能的少重复
  • 相关阅读:
    Nubia Z5S官方4.4 UI2.0音频Audio部分简单分析(也适用于其它8974/8064机型)以及降低破音出现几率的方法
    import MySQLdb UserWarning
    Visual Studio 2013 Update2
    cocos2d 重写顶点着色语言
    tomcat之组成结构
    4、Android Activity的生命周期 Activity的生命周期
    学习中遇到的c++问题,持续更新
    Android开发之发送邮件功能的实现(源码分享)
    Java 类型, Hibernate 映射类型及 SQL 类型之间的相应关系
    QT内label控件通过opencv显示图像
  • 原文地址:https://www.cnblogs.com/52py/p/7758155.html
Copyright © 2020-2023  润新知