参考菜鸟教程和精通正则表达式一书,其中精通正则表达式里面的例子大多都是perl脚本的,工作中也用到perl脚本,还是能看懂的。

正则表达式在线生成工具:http://tools.jb51.net/regex/create_reg

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。

[….]代表结构体,它容许使用者列出在某处期望匹配的字符,通常被称作字符组

正则表达式[ea]能匹配a或者e。gr[ea]y的意思是:先找到g,跟着是一个r接下来是a或者e,最后是一个y。

[]代表着范围,eg[a-z]代表着从a-z的所有字符

()仅代表着匹配的字符,(a-z)代表着能匹配a,-,z三个字符

[^…….] 排除性字符组 未列出的任意字符,排除所有的字符

搜索03/19/76、03-19-76 可以用03.19.76来表示

要想正确使用正则表达式,清楚地了解目标文本是非常重要的

\  代表转义符(它会让元字符失去特殊含义,成为普通字符)

匹配引号内的字符串”[^”]*”

正则表达式在perl脚本中的使用

非打印字符

\cx(x为A-Z或a-z之一,否则将c视为一个原义‘c’字符)匹配由x指明的控制字符,例如\cM匹配一个 Control-M或回车符

\f换页符

\n换行符

\r匹配一个回车符

\s匹配空白字符

\S匹配任何空白字符

\t匹配一个制表符

\v匹配一个处置制表符

每行的结尾实际是\r\n,如果要是把好多行变成一行的话,把\r\n替换为空

特殊字符(特殊含义的字符)

量词(*+?这三个符号)

1.*号代表前面一位字符可以不出现,或出现多次

runoo*b,可以匹配 runob、runoob、runoooooob 等,* 号代表字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)

2.+号代表着前面一位字符必须出现一次,或出现多次

runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)

3.colou?r 代表前面一位字符出现0或一次

可以匹配color或colour

空格符也是普通字符之一,也会触发特殊字符的效果

^ 脱字符  行的起始位置

$字符串结尾位置

()  标记一个子表达式的开始和结束位置,子表达式可以获取供以后使用

*   匹配前面的子表达式零次或多次。要匹配*字符的话,要\*这么写。(0次、1次、多次)

+   匹配前面的子表达式一次或多次。要匹配+字符的话,要\+这么写。(1次或多次)

.   匹配除换行符\n之外的任何单字符,要匹配.的话,要\.这么写。

[   标记一个中括号表达式的开始(也叫范围表达式)。要匹配[,请使用\[。

?   匹配前面的子表达式(0次或1次)。

\   将下一个字符标记或特殊字符,或原义字符字符、或向后引用、或八进制转义符,例如,’n’

匹配字符’n’,‘\n’匹配换行符,序列‘\\’匹配‘\’,而‘\(’则匹配‘(’。

^    匹配输入字符串的开始位置,除非在方括号表达式中使用,此时他表示不接受该字符集合,要匹配^字符本身,请使用\^。

|     指明两项之间的一个选择。要匹配|,请使用\|。

限定符(判断一个条件出现多少次才符合规则的符号)

限定符用来指定正则表达式的一个给定组件必须出现多少次才能满足匹配,有*或+或?或{n,}或{n,m}共6种。

*     匹配前面的子表达式零次或多次,例如,zo*能匹配“z”以及“zoo”。等价于{0,}。>=0

+       匹配前面的子表达式一次或多次,例如,’zo+’能匹配“zo”以及“zoo“,但不能匹配“z”,等价于{1,}。>=1

?     匹配前面的子表达零次或一次。例如,”do(es)?”能匹配“do”、“does”中的“does”、“doxy”中的“do”。?等价于{0,1}。n=0/1

{n}     n表示一个非负整数,匹配确定的n次(匹配的字段里面已经有的个数),例如o{2},能匹配flood,但不能匹配flod。

{n,}    n表示一个非负整数,至少匹配n次(相当于>=n次),例如,o{2,}能匹配flooooood,但不能匹配‘flod’。o{1,}等价于o+。o{0,}等价于o*。

{n,m}  n和m均为非负整数,其中n<m。最少匹配n次且最多匹配m次,例如,“o{1,3}”将匹配“fooooood”的前三个o。‘o{0,1}’等价于“o?”。(逗号和两个数字之间不能有空格)。

只匹配两位数字的更好的表达式如下:[0-9][0-9]?或[0-9][0-9]{0,1}

+限定符贪婪与非贪婪情况

*+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

例如,您可以搜索HTML文档,以查找在H1标记内的章节标题。该文本在您的文档如下;

<H1>Chapter 1 –介绍正则表达式</H1>

贪婪:下面的表达式 匹配从小于符号(<)到关闭H1标记的大于符号(>)之间的所有内容。

/<.*>/

非贪婪:如果您只要匹配开始和结束H1标签,下面的非贪婪表达式只匹配<H1>。

/<.*?>/

如果只想匹配开始的H1标签,表达式则是:

/<\w+?>/

通过*、+或?限定符之后放置?,该表达式从“贪心”表达式转换为“非贪心”表达式或者最小匹配。

定位符

定位符能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。

定位符用来描述字符串或单词的边界,^$分别指字符串的开始与结束,\b描述单词的前或后边界,\B表示非单词边界。

正则表达式的定位符有:

^       匹配输入字符串开始的位置,如果设置了RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。

$     匹配输入字符串结尾的位置,如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。

\b    匹配一个单词边界,即字与空格间的位置。(边界是一个单词的前面和后面)

\B   非单词边界匹配。(只能匹配单词之间的字符,不能匹配边界的字符)

注意:不能将限定符与定位符一齐使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如   ^* 之类的表达式。

要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符,不要将 ^ 的这种用法与中括号表达式内的用法混淆。

若要匹配一行文本的结束处的文本,请在正则表达式的结束使用 $ 字符。

若要在搜索章节标题时使用定位点,下面的正则表达式匹配一个章节标题,改标题包含两个尾随数字,并且出现在行首:

以下例子中的//符号在测试的时候不用加上

/^Chapter [1-9][0-9]{0,1}/

真正的章节标题不仅出现行的开始处,而且它还是该行中仅有的文本.它即出现在行首又出现在同一行的结尾。下面的表达式能确保制定的匹配值匹配章节而不匹配交叉引用。通过创建只匹配一行的文本开始和结尾的正则表达式,就可做到这一点。

/^Chapter [1-9][0-9]{0,1}$/

匹配单词边界稍有不同,但想正则表达式添加了很重要的能力,单词边界是单词和空格之间的位置,非单词边界是任何其他位置,下面的表达式匹配单词Chapter的开头三个字符,因为这三个字符出现在单词边界的后面:

/\bCha/

\b 字符的位置是非常重要的。如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项。如果它位于字符串的结尾,它在单词的结尾处查找匹配项

/ter\b/

线面的表达式匹配Chapter中的字符串apt,但不匹配aptttsdf中的apt

/\Bapt/

选择

用圆括号将所有选择项括起来,相邻的选择项之间用|分隔,但用圆括号会有一个副作用,使相关的匹配会被缓存,此时可用?:放在第一选项前来消除这种副作用。

其中?:是非捕获元之一,还有两个非捕获元是?==和?!,这两个还有更多的含义,前者为正向预查,在任何开始匹配圆括号内的正则表达式的模式的位置来匹配搜索字符串,后者为负向检查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。

反向引用(把所有符合正则表达式的重复都匹配出来)

对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储,缓冲区编号从1开始,最多可存储99个捕获的子表达式。每个缓冲区都可以使用\n使用,其中n为一个特定缓冲区的一位或两位十进制数。

可以使用非捕获元字符?:、?=或?!来重写捕获,忽略对相关匹配的保存。

反向引用的最简单的、最有用的应用之一,是提供查找文本中两个相同的相邻单词的匹配项的能力,以下面的句子为例:

Is is the cost of of gasoline going up up?

上面的句子很显然有多个重复的单词。如果能设计一种方法定位该句子,而不必查找每个单词的重复出现,那该有多好,下面的正则表达式使用单个子表达式来实现这一点:

元字符

\b    匹配一个单词边界,单词和空格键的位置

\B   匹配非单词边界。

\cx  匹配由x指明的控制字符,例如\cM匹配一个Control-M或回车符,x的值必须为A-Z或a-z之一。否则将c视为一个原义’\c’字符。

\w  匹配字母、数字、下划线,等价于’[A-Za-z0-9_]’。

\W  匹配非字母、数字、下划线的所有,等价于‘[^A-Za-z0-9_]’。

\d    匹配一个数字字符,等价于[0-9]。

\D   匹配一个非数字字符,等价于[^0-9]。

\s    匹配任何空白字符。

\S    匹配任何非空白字符。

\t    匹配一个制表符。等价于\x09和\cK

\v    匹配一个垂直制表符。等价于\x0b和\cK。

\n    括号能够“记忆”其中的子表达式匹配的文本,无论文本是什么,元字符序列\1都能记住他们。多个括号的时候,使用\1,\2,\3,等来表示第一、第二、第三括号匹配的文本。

例如([a-z])([0-9])\1\2中\1代表[a-z]匹配的内容,\2代表[0-9匹配的内容]

\xn  匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两位数字长。例如,‘\x41’匹配“A”。‘\x041’则等价于‘\x04’$”1”。正则表达式中可以使用ASCII编码。

\num 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,‘(.)\1’匹配两个连续的相同字符。

\un  匹配以n类型编码格式的字符。详见另一篇博客匹配中文字符https://blog.csdn.net/yyf960126/article/details/85048591

浮点数:^([-+]?[0-9]+(\.[0-9]*)?)

P82

\1代表第一段正则匹配的文字,\2代表第二段匹配,\3代表第三段匹配

正则表达式(菜鸟教程+精通正则表达式)未完结相关推荐

  1. php 正则表达式 菜鸟,正则表达式菜鸟教程.pdf

    正则表达式菜鸟教程 正则表达式菜鸟教程 1开山篇教程 正则表达式 - 教程 正则表达式(Regular Expression)是一种文本模式,包括普通字符 (例如,a 到 z 之间的字母) 和特殊字符 ...

  2. 菜鸟教程python正则表达式_Python正则表达式常用函数菜鸟教程

    这篇文章主要为大家详细介绍了Python正则表达式常用函数菜鸟教程,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! Py ...

  3. 菜鸟教程python正则表达式_python 正则表达式详解

    python 正则表达式详解 1. 正则表达式模式 模式描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字 ...

  4. 菜鸟教程python正则表达式_Python 正则表达式

    Python 正则表达式 正则表达式是搜索模式形成的字符序列. 它可用于检查字符串是否与某种字符匹配的搜索模式. RegEx模块 Python有一个内置的包re,可以用来处理正则表达式. 导入re模块 ...

  5. python正则表达式实例教程_Python正则表达式经典入门教程

    本文实例总结了Python正则表达式基本用法.分享给大家供大家参考,具体如下: 正则表达式在平时做文本处理(爬虫程序去解析html中的字段,在分析log文件的时候需要抓取一些关键数据)的时候经常会用到 ...

  6. 神仙程序媛小姐姐的一些列Java教程,从小白到进阶,春招和秋招必备的面试题,全站式保姆的Java教程导航帖(未完结)

    Java入门教程导航,未完结,以后的时间不定期补番. Java基础篇 (入门阶段) 小姐姐教你:java环境变量 的配置与详解(全网最详细教程 小姐姐手把手教你最基础Java语法,快来我的碗中 [Ja ...

  7. 读《精通正则表达式》-- 网上 js 正则基础教程没有涉及的一些知识

    正则起源 最近看完了 <精通正则表达式>,收获颇丰,略过了一些晦涩难懂的理论部分,主要看了实战和教程部分. 下面引用一下百度百科里的内容. 正则表达式的"鼻祖"或许可一 ...

  8. Python正则表达式简单说明(菜鸟教程里面的说明)

    摘自菜鸟教程 ::大家可以去看一下 挺有用的 正则表达式--可选标志含义 re.match()::匹配开头 re.search()::全部匹配 源自:http://www.runoob.com/pyt ...

  9. 正则表达式完整教程(7篇精品文章,带你精通正则表达式)

    引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程,网上也有很多,相信你也看了一些. ...

最新文章

  1. 【SICP练习】127 练习3.58
  2. spring顾问包装通知
  3. curl   liinux下http命令执行工具
  4. C/C++中printf和C++中cout的输出格式
  5. 中国卡曼涡气流传感器行业市场供需与战略研究报告
  6. Kruskal/prim--最小生成树
  7. Q122:PBRT-V3,提高Monte Carlo积分计算效率的方法——Russian Roulette和Splitting(13.7章节)
  8. Matlab函数——randn
  9. 增加游戏受众:在英特尔核显上运行MR游戏
  10. mysql sql语法区别_sql和mysql语法有什么不同
  11. c/c++基础篇--------------------------基本框架及语法
  12. 三角网导线平差实例_导线平差实例(一):简易平差
  13. 教你轻松又简单的绘制地铁线路图
  14. zigbee模块和433无线模块的区别
  15. Java并发编程面试题合集
  16. Redis:Error starting userland proxy: listen tcp4 0.0.0.0:6379: bind: address already in use
  17. armbian 斐讯n1_尝试使用斐讯N1在armbian终端下播放音乐
  18. http/https/浏览器
  19. PTA L1-039 python实现
  20. Kolmogorov-Smirnov test 详细介绍

热门文章

  1. 混合网络:为自动驾驶设计的一种快速车辆检测系统
  2. vue 日期时间选择器_Vue日期时间选择器
  3. Rhino 6 偏移曲面 选项有很多玄机
  4. 游戏编程十年总结(上)(转)
  5. C# modbus ushort转short
  6. XC6206P332MR(0.25V低压差线性LDO稳压器,稳压输出3.3V,最大电压输入6V,输出电流250mA)
  7. postgresql分妺_PostgreSql数据库分表
  8. Android 重装系统之小米系统
  9. 编译原理 | 第一章课后习题答案
  10. 高一凡-数据结构第3章-栈与队列