[笔记] 精通正则表达式/Mastering Regular Expressions
/ 匹配<emphasis>这个tag标注的IP地址的RE:‘<emphasis>([0-9]+(\.[0-9]+){3})</emphasis>'
/ 锚定--anchor
/ 最好能养成按照字符来理解RE的习惯:例如 '^cat',不要理解为匹配以cat开头的行,而应该理解为匹配以c作为一行的第一个字符,紧接一个a,紧接一个t的文本;
/ '^$'匹配的是没有任何字符,包括空白字符的空行;
/ ^和$匹配的是一个位置,不是文本;
/ 问号和点号在字符租([])里不是元字符;
/ 排除--negate
/ egrep会在检查RE之前把文本行末尾的换行符去掉;
/ 'gr(a|e)y'中用括号来划定多选结构的范围(正常情况下,括号也是元字符);
/ 一个字符组([])只能匹配目标文本中的单个字符,而每个多选结构自身都可能是完整的RE,都可以匹配任意长度的文本;
/ 限制--constrain 不去分大小写--case-insensitive;
/ '\<'和'\>'用来匹配单词的开头和结束位置,其中<、>本身并不是元字符,只有当它们与斜线结合起来的时候,整个序列才具有特殊意义,这就是它们被称为“元字符序列”的原因;
/ “单词的起始位置”是一系列字母和数字(注意不包括符号)开始的位置,“结束位置”就是它们结尾的地方;
/ 问号表示可选项,把它加在一个字符后面,表示此处容许出现这个字符,不过他的出现并非匹配成功的必要条件;
/ 空格符也是普通字符之一;
/ 反向引用(backreference)引用的顺序是按照开括号从左到右出现的顺序进行的;
/ 反斜线--backslash 转义符--escape
/ 匹配引号内的字符串最简单的表达式:' "[^"]*" '
/ 匹配"12:30 pm"---'(1[012]|[1-9]):[1-5][0-9] (am|pm)'
/ 处理24小时制时间:把时间分为三部分:其一是上午(小时数从00到09,开头的0可选),其二是白天(小时数从10到19),其三是夜晚(小时数从20到23)--'0?[0-9]|1[0-9]|2[0-3]'
/ 由星号和问号限定的对象在“匹配成功”时可能并没有匹配任何字符,即使什么字符都不能匹配到,他们仍然会报告“匹配成功”;
/ '(?:...)'表示只分组不捕获;
/ '[□\t]*'与'(□*|\t*)'的异同:前者可以匹配若干空格符(也可以没有)以及若干制表符(也可以没有),不过并不容许制表符与空格符发的混合体;相反,前者能够匹配任意多个'□\t',对于字符串'\t□□',他可以匹配三次,第一次是制表符,后两次是空格符。
/ \s是表示所有表示空白字符(whitespace character)的字符组,包括空格符、制表符、换行符和回车符;
/ 修饰符---modifier 替换--substitution 订阅--subscription
/ 要求:保留小数点后两位数字,如果第三位不为零则也需要保留,去掉去他的数字,例如12.3750000000392或者12.375会被修正为'12.375',而37.500会被修正为'37.50',RE为s/(\.\d\d[1-9]?)\d*/$1/
/ 在字符组中的元字符不同于正在表达式中的元字符,在字符组内部,括号不再具有特殊含义,也不需要转义;
/ '^From:□(\s+)□\(([^()]*)\)'--\(、\)普通括号字符;
/ POSIX字符组:
[:alpha:]--字母字符
[:digit:]--数字字符
[:alnum:]--字母字符和数字字符
[:blank:]--空格和制表符
[:space:]--所有的空白字符([:blank:]、换行符、回车符及其他)
[:cntrl:]--控制字符
[:graph:]--非空字符(即空白字符、控制字符之外的字符)
[:print:]--类似[:graph:],但是包含空白字符
[:punct:]--标点符号
[:xdigit:]--十六进制中允许出现的数字(例如0-9a-fA-F)
[:lower:]--小写字母
[:upper:]--大写字母
/ 忽略优先量词:*?、+?、??、{num,num}?
量词在正常情况下都是“匹配优先(greedy)的”,匹配尽可能多的内容;相反,忽略优先量词会匹配尽可能少的内容,只需要满足下限,匹配就能成功;
/ 由星号限定的部分总是能够匹配,如果整个表达式都是由星号控制,它就能够匹配任何内容;
/ 匹配以反斜杠及换行符结尾的多行:'^\w+=[^\n\\]*(\\\n[^\n\\]*)*'
/ 匹配IP:'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}',如果不支持,则可以用'\d\d?\d?'或者'\d(\d\d?)?'
/ 所在路径及文件名:'^(.*)/([^/]*)$'
/ 正则表达式无法匹配任意深度的嵌套结构;(例如多层括号嵌套);
/ 如果某个元素的匹配没有硬性规定任何必须出现的字符,那么他总能匹配成功;
/
[笔记] 精通正则表达式/Mastering Regular Expressions的更多相关文章
- 正则表达式备忘录-Regular Expressions Cheatsheet中文版
正则表达式备忘录Regular Expressions Cheatsheet中文版原文:https://www.maketecheasier.com/cheatsheet/regex/ 测试文件a.t ...
- 正则表达式(Regular expressions)使用笔记
Regular expressions are a powerful language for matching text patterns. This page gives a basic intr ...
- 精通正则表达式(第三版)—Mastering Regular Expressions,3rd Edition—读书笔记2
1.肯定断言:必须匹配一个字符 排除型字符组:匹配未列出字符的字符组 2.范围表示法——列出范围内所有的字符 大多数情况下,不会影响执行速度.但是,某些实现方式不能完全优化字符组.所以,最好是有范围表 ...
- 精通正则表达式(第三版)——Mastering Regular Expressions,3rd Edition——读书笔记1
基础知识介绍: 子表达式匹配 环视 引号内的字符串:"(^")*" 12小时制:(1[0123]|[1-9]):[0-5][0-9]*(am|pm) 24小时制:(([0 ...
- Introducing Regular Expressions 学习笔记
Introducing Regular Expressions 读书笔记 工具: regexbuddy:http://download.csdn.net/tag/regexbuddy%E7%A0%B4 ...
- Regular Expressions --正则表达式官方教程
http://docs.oracle.com/javase/tutorial/essential/regex/index.html This lesson explains how to use th ...
- 自学Zabbix8.1 Regular expressions 正则表达式
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix8.1 Regular expressions 正则表达式 1. 配置 点击Adm ...
- 【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 ...
- Python之Regular Expressions(正则表达式)
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 很可能你使用过Windows/Dos下用 ...
随机推荐
- 关于php ‘==’ 与 '===' 遇见的坑
两个的区别所有PHPer都知道, 今天在遍历 xmlNode时,自己写的代码就碰坑了 想遍历xmlNode为数组 得到的xmlNode为 想要把所有的simpleXmlElement对象都遍历转成数组 ...
- 移动端(钉钉微服务)webpack配置需要移除hash来解决应用更新后白屏的问题
钉钉微服务webpack配置调整方案 1: Vue CLI配置修改方法 a. 修改build下webpack.prod.config.js.去掉图中三处hash(.[chunkhash]): b. 修 ...
- CS231n笔记 Lecture 1 Introduction
主题有关 这一讲主要是介绍性质的,虽然大多数概念以前听说过,但还是在他们的介绍中让我有如下一些认识,所谓温故而知新,不无道理: IMAGENET Feifei Li的团队首先爬取.标注了IMAGENE ...
- hdoj--2082<母函数>
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=2082题目描述:26个字母各有价值,分别是1到26:给出每个字母的个数,求单词价值不超过50 的单词 ...
- TCP面试题之为什么需要三次握手才能建立连接/四次挥手才能断开连接
为什么需要三次握手才能建立连接? 答:为了初始化Sequence Number(序列号)的初始值,要通知双方数据包的序号,作为以后通讯的序号,以保证在网络传输过程,不会因为网络原因而导致乱序: 为什么 ...
- 洛谷 [P2859] 摊位预定
贪心 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm ...
- 【CF1016A】Death Note(签到)
题意:无限页的书,每页可以写m个名字,给你一个长度为n的序列,序列为你每天要写的名字数,输出你每天要翻的页数. n<=2e5,m,a[i]<=1e9 思路: #include<cst ...
- C语言实验报告二
实验一:第11次实验作业报告 题目:方阵循环右移 实验要求:将给定n×n方阵中的每个元素循环向右移m个位置,即将第0.1.⋯.n−1列变换为第n−m.n−m+1.⋯.n−1.0.1.⋯.n−m−1列. ...
- 转 C++中不能声明为虚函数的有哪些函数
传送门 C++中不能声明为虚函数的有哪些函数 常见的不不能声明为虚函数的有:普通函数(非成员函数):静态成员函数:内联成员函数:构造函数:友元函数. 1.为什么C++不支持普通函数为虚函数? 普通函数 ...
- gpio_direction_output vs gpio_set_value之间的使用关系
在Linux驱动中常常会碰到gpio_set_value(port_num,0/1)或gpio_direction_output (port_num,0/1) 这两者有什么关系呢gpio_set_va ...