(原创文章,谢绝转载~)

日常开发中,常用正则表达式方便的进行匹配、筛选工作。正则的常用内容有:

  • 一般情况下原则:从左至右,越多越好(贪婪)
  • 字符;转义:\ ,如 \*,\d (数字)等
  • 选择,case1|case2|case3,

注意:对于大部分正则引擎,匹配规则是从左至右优先,因而,string|stringlong  会匹配到 stringlong 的 string 部分;

少数  Text-Directed Engine  的匹配规则则是最长优先,此时 string|stringlong  会匹配到 stringlong ;

  • 起始位置:^  ,结束位置: $,  注意^和$并不匹配字符而是匹配位置,例如 d$ 可以匹配到 end 的 d,其中end的d字符的右边位置恰为结束位置。
  • 重复数量:
  1. 精确重复数量,{n},例如: char{3}   匹配 charrr,r 重复3次
  2. 非精确重复数量,
    • 0-1 次: ?  ,例如 char?  匹配char(优先)或cha
    • 1-无穷:+ , 例如 char+   匹配char,charr,charrr,.......其中r至少重复1次
    • 0-无穷:* ,  例如 char*   匹配 cha,char,charr,.......其中r重复0次及以上
    • lazy懒惰模式,在上面三种情况下后面再加?号,  ??, +?, *?  ,在这种情况下,匹配越少越好,

例如 char??  ,本来一个问号是 0-1,再lazy模式,则越少越好,0次,于是char?? 可匹配 cha 而不能匹配 char

再如 char+?  ,本来一个加号是1-无穷,再lazy模式,则越少越好,1次,于是char+? 可匹配 char 而不能匹配 charr ,charrr等

    • possessive占有模式,在上面三种情况下后面再加+号,  ?+, ++, *+  ,在这种情况下,匹配越多越好,且不回溯

例如  char++, 越多越好 ,charrrrr,有多少r匹配到多少,

另一方面,不回溯,是什么含义呢,考虑以下问题:  char++r,   它能否匹配 charrrrr ?答案是 不能。事实上:

cha  r++  r

cha  rrrr  r             看过去好像可以让r++ 匹配4个r,最后一个r匹配r,这样正好匹配上,但因为独占模式是越多越好,所以第5个r 也会被 r++ 匹配到,也就是下图所示:

cha  r++       r

cha  rrrrr                r++ 匹配到 rrrrr, 一旦匹配上则占有,不会再回溯(减少r的数量),因而  char++r  中的最后一个r ,没有东西和它匹配,所以匹配失败。

细思则有:   char++r  无法匹配任何形式。。。

  • 捕获组和索引值(Capturing Groups and Backreferences )

捕获组 用括号括住捕获部分,(regex),例如 (regex1)(regex2){3} ,regex1 和regex2 分别为两个捕获组,且分别具有索引值1和2,

   注意:索引值序列123...的编码顺序为根据括号先从左至右,从外到内递归,

        例如 (str1)(str(str3))(str4), str1索引值为1,(str(str3)) 整体索引值为2,str3 索引值为3,str4 索引值为 4。

正则表达式小结(Regular Expressions)的更多相关文章

  1. 正则表达式备忘录-Regular Expressions Cheatsheet中文版

    正则表达式备忘录Regular Expressions Cheatsheet中文版原文:https://www.maketecheasier.com/cheatsheet/regex/ 测试文件a.t ...

  2. 正则表达式(Regular expressions)使用笔记

    Regular expressions are a powerful language for matching text patterns. This page gives a basic intr ...

  3. [笔记] 精通正则表达式/Mastering Regular Expressions

    / 匹配<emphasis>这个tag标注的IP地址的RE:‘<emphasis>([0-9]+(\.[0-9]+){3})</emphasis>' / 锚定--a ...

  4. 自学Zabbix8.1 Regular expressions 正则表达式

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix8.1 Regular expressions 正则表达式 1. 配置 点击Adm ...

  5. Python之Regular Expressions(正则表达式)

    在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 很可能你使用过Windows/Dos下用 ...

  6. 转载:邮箱正则表达式Comparing E-mail Address Validating Regular Expressions

    Comparing E-mail Address Validating Regular Expressions Updated: 2/3/2012 Summary This page compares ...

  7. Regular Expressions --正则表达式官方教程

    http://docs.oracle.com/javase/tutorial/essential/regex/index.html This lesson explains how to use th ...

  8. Regular Expressions in Grep Command with 10 Examples --reference

    Regular expressions are used to search and manipulate the text, based on the patterns. Most of the L ...

  9. Introducing Regular Expressions 学习笔记

    Introducing Regular Expressions 读书笔记 工具: regexbuddy:http://download.csdn.net/tag/regexbuddy%E7%A0%B4 ...

  10. 【Python学习笔记】Coursera课程《Using Python to Access Web Data 》 密歇根大学 Charles Severance——Week2 Regular Expressions课堂笔记

    Coursera课程<Using Python to Access Web Data > 密歇根大学 Charles Severance Week2 Regular Expressions ...

随机推荐

  1. java学习——平台的安装与部署

    Java 平台安装与部署 jre,jdk安装与部署 1)jre,jdk安装过程(略) 2)部署过程 新建(JAVA_HOME) 变量名:JAVA_HOME 变量值:E:\Program Files ( ...

  2. [IR] String Matching

    BWT KMP Boyer-Moore BWT [IR] BWT+MTF+AC 中已经介绍了BWT (Burrows–Wheeler_transform)数据转换算法, 这种变换方式不仅方便压缩,同时 ...

  3. jquery页面水印插件,支持多行水印、行错开

    最近工作需求,需要在页面上加水印,但发现网上示例无法满足我的需求,所以还是自己动手写. 有几个特别需求: 1.可以写多行水印,并且中心对齐. 2.每行水印错开. PS:我找到的例子都是单行水印,所以用 ...

  4. JAVA WEBSERVICE服务端&客户端的配置及调用(基于JDK)

    前言:我之前是从事C#开发的,因公司项目目前转战JAVA&ANDROID开发,由于对JAVA的各种不了解,遇到的也是重重困难.目前在做WEBSERVICE提供数据支持,看了网上相关大片的资料也 ...

  5. 高性能队列Disruptor系列2--浅析Disruptor

    1. Disruptor简单介绍 Disruptor是一个由LMAX开源的Java并发框架.LMAX是一种新型零售金融交易平台,这个系统是建立在 JVM 平台上,核心是一个业务逻辑处理器,它能够在一个 ...

  6. centos 6.6 ios镜像文件 下载 官网和阿里云两种方式教你下载

    1百度一下:centos 打开打开官网.选择这一项 CET CENTOS 2选择 DVD ISO,双击下载 直接选择左键点击下载 这里需要迅雷 方法 二 打开 https://mirrors.aliy ...

  7. 实现简易版的moment.js

    github源码地址: www.baidu.com 作者: 易怜白 项目中使用了时间日期的处理方法,只使用了部分方法,为了不在引入第三方的库(moment.js),这里自己封装了项目中使用到的方法. ...

  8. Oracle 分页方法研究

    1.Oracle 中的三大分页方法 1.1.通过分析函数分页 1.2.通过 ROWNUM 分页 1.3.通过 ROWID 分页 2.Oracle 分页解决方案浅析 2.1.纯后端代码完成分页 2.2. ...

  9. node.js 发送http 请求

    自己研究了一下 node.js 的 http模块  下面为想服务器发送请求的代码 ,通过学习了解http 请求的过程 ,node.js 对http请求的原始封装比较低,以前php 可以用$_GET , ...

  10. PHP二维数组合并,根据某个key合并

    /** *PHP二维数组合并,根据某个key合并 * @param type $v 要传入的组合阵列 * @param type $keyname 对应的KEY名称. * @param type $v ...