玩转正则表达式(Regular),这个世界正在奖励偷偷用心的人

  声明:以下只是本人学习正则表达式的笔记概要,主要参考:

  正则表达式30分钟入门教程

1.必记的常用元字符:

. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字 \W表示与之相反
\s 匹配任意的空白符 \S表示与之相反
\d 匹配数字 \D表示与之相反
\b 匹配单词的开始或结束 \B表示与之相反
^ 匹配字符串的开始
$ 匹配字符串的结束
[x] 匹配字符x [^x]表示出来字符x以外的任意字符
[aeiou] 匹配英语中的元音字母 [^aeiou] 表示除了元音字母以外的所有字符

2.必记的常用限定符

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

3.必记的常用分组语法

  小括号表示一个子表达式,匹配这个子表达式也就是捕获匹配到的文本,
  默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推,
  组号分配过程是要从左向右扫描两遍的:第一遍只给未命名组分配,第二遍只给命名组分配--因此所有命名组的组号都大于未命名的组号

  3.1捕获
    (exp) 匹配exp,并捕获文本到自动命名的组里 \b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty
    (?<name>exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?‘name‘exp)

    上面的正则指定组名,可以写成\b(?<Word>\w+)\b\s+\k<Word>\b

    (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号 (?:@\w*)binguo\w*匹配@开头包含binguo的字符串
      (?:exp)不会改变正则表达式的处理方式,只是这样的组匹配的内容不会像前两种那样被捕获到某个组里面,也不会拥有组号
  3.2零宽断言
    (?=exp) 匹配exp前面的位置 \b\w+(?=ing\b) I‘m singing while you‘re dancing 匹配sing和danc
    (?<=exp) 匹配exp后面的位置

        (?<=\bre)\w+\b reading a book 匹配ading (?<=\s)\d+(?=\s)匹配以空白符间隔的数字(再次强调,不包括这些空白符)
    (?!exp) 匹配后面跟的不是exp的位置

       \b((?!abc)\w)+\b匹配不包含连续字符串abc的单词\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字

    (?<!exp) 匹配前面不是exp的位置 (?<![a-z])\d{7}匹配前面不是小写字母的七位数字
       (?<=<(\w+)>).*(?=<\/\1>)匹配不包含属性的简单HTML标签内里的内容
  3.3注释
    (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
    (?<= # 断言要匹配的文本的前缀
    <(\w+)> # 查找尖括号括起来的字母或数字(即HTML/XML标签)
    ) # 前缀结束
    .* # 匹配任意文本
    (?= # 断言要匹配的文本的后缀
    <\/\1> # 查找尖括号括起来的内容:前面是一个"/",后面是先前捕获的标签
    ) # 后缀结束

4.必记的懒惰限定符

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

贪婪匹配:

  在使整个表达式能得到匹配的前提下,匹配尽可能多的字符
  a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。

懒惰(非贪婪)匹配:

  也就是匹配尽可能少的字符,《2.必记的常用限定符》提到的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?
  a.*?b匹配最短的,以a开始,以b结束的字符串

  如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)
  为什么第一个匹配的是aab(第一到第三个字符)而不是ab(第二到第三个字符)?
  简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权

5.非常用正则表达式元素

\a 报警字符(打印它的效果是电脑嘀一声)
\b 通常是单词分界位置,但如果在字符类里使用代表退格
\t 制表符,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$,但不受处理多行选项的影响)
\G 当前搜索的开头
\p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
(?>exp) 贪婪子表达式
(?<x>-<y>exp) 平衡组
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 为表达式后面的部分改变处理选项
(?(exp)yes|no) 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
(?(exp)yes) 同上,只是使用空表达式作为no
(?(name)yes|no) 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes) 同上,只是使用空表达式作为no

附录:
正则表达式本地及在线测试工具、MSDN官方正则表达式在线文档

MSDN正则表达式语言 - 快速参考

Regester正则表达式测试工具-绿色版.zip

Regester正则表达式测试工具-安装版.zip

编写正则表达式时,时时点亮匹配到的文本(但不支持中文,有点遗憾)

很牛逼的一个在线正则匹配网站,时时点亮加支持中文

IP地址匹配: ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

(\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。表达式顺序分析:

\d{1,3}匹配1到3位的数字,

(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,

最后再加上一个一到三位的数字(\d{1,3})

时间: 2024-10-20 14:42:24

玩转正则表达式(Regular),这个世界正在奖励偷偷用心的人的相关文章

30分钟带你玩转正则表达式

        30分钟带你玩转正则表达式   定义: 正则表达式说白了就是有普通字符.以及特殊字符组成的文子模式.{匹配模式标准} 正则表达式将会作为一个模板与所搜索的字符串进行匹配.可以让使用者轻易达到搜寻/删除/取代某些特定字符的处理程序.此外vim.grep.find.awk.sed等命令都支持正则表达式 注:在这里希望大家搞明白一件事,那就是通配符和正则表达式的区别与关系: 1.正则表达式是用来匹配字符串的,这个就不解释了2.通配符是用来通配的,也就是shell在做Pathname E

正则表达式 ( Regular Expression )

正则表达式中的元字符 字符 说明 \ 将下一字符标记为特殊字符.文本.反向引用或八进制转义符.例如,“n”匹配字符“n”.“\n”匹配换行符.序列“\\”匹配“\”,“\(”匹配“(”. ^ 匹配输入字符串开始的位置.如果设置了 RegExp 对象的 Multiline 属性,^ 还会与“\n”或“\r”之后的位置匹配. $ 匹配输入字符串结尾的位置.如果设置了 RegExp 对象的 Multiline 属性,$ 还会与“\n”或“\r”之前的位置匹配. * 零次或多次匹配前面的字符或子表达式.

Python3 正则表达式 Regular Expression

2019/02/08正则表达式Regular Expression掌握特殊符号* (0, +00) # 贪婪匹配,按最多的匹配>>> re.findall('alex*', 'sddgljalexdhgb')['alex']>>> re.findall('alex*', 'sdghshalexxxxxgdhg')['alexxxxx'] + (1, +00) # 贪婪匹配,按最多的匹配>>> re.findall('alex+', 'sdghshale

Python正则表达式Regular Expression基本用法

资料来源:http://blog.csdn.net/whycadi/article/details/2011046   直接从网上资料转载过来,作为自己的参考.这个写的很清楚.先拿来看看. 1.正则表达式re模块的基本函数. (1)findall函数的用法 findall(rule,target[,flag])是在目标字符串中找到符合规则的字符串.参数说明:rule表示规则,target表示目标字符串,[,flag]表示的是规则选项.返回的结果是一个列表.若没找到符合的,是一个空列表. 如: 因

C#中【正则表达式regular expression】相关的知识

Regex System.Text.RegularExpressions.Regex      regex应该是regular expression的缩写 https://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.regex(v=vs.110).aspx Represents an immutable regular expression.[immutable 不可变的] 代表了不可变的正则表达式 The Re

正则表达式REGular Expression

基本正则表达式:Basic REGEXP 元字符 释义 .  匹配任意单个字符  []  匹配指定范围内单个字符 [^]  匹配指定范围外单个字符 * 其前面字符出现任意次 \? 其前面字符出现0次或者1次 \{m,n\} 其前面字符至少m次,至多n次:没上限省略n .* 任意长度的任意字符 ^ 锚定行首 $ 锚定行尾 \< , \b 锚定词首 \> , \b 锚定词尾 \(\) 分组 \1, \2, \3 后项引用 扩展正则表达式:Extended REGEXP 元字符 释义 .  匹配任意

javascript基础知识之正则表达式(regular expression)

一种字符串匹配的模式,用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等.注意:在javascript中正则表达式也是一种对象1:创建正则表达式两种方式:隐式创建(文字量方法)和显示创建(使用构造函数)eg:文字量方法:var regExp = /pattern/flags;将文字量的正则表达式赋值给一个变量,包含在两个斜杠之间的一个或多个字符,在后一个斜杠的后面,可以指定一个或多个选项.var regExp1 = /abc/;var regExp2 = /a

正则表达式Regular expressions

根据某种匹配模式来寻找strings中的某些单词 举例:如果我们想要找到字符串The dog chased the cat中单词 the,我们可以使用下面的正则表达式: /the/gi 我们可以把这个正则表达式分成几段: / 是这个正则表达式的头部 the 是我们想要匹配的模式 / 是这个正则表达式的尾部 g 代表着 global(全局),意味着返回所有的匹配而不仅仅是第一个. i 代表着忽略大小写,意思是当我们寻找匹配的字符串的时候忽略掉字母的大小写.

C#学习记录5——正则表达式 Regular Expression

正则表达式,使用一个字符串来匹配符合一定标准的一系列字符串.非常利于检查字符串的格式,例如,注册登录时对信息格式的检查. C#的正则表达式在命名空间System.Text.RegularExpressions下 例1. 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System