正则表达式快速入门

1. 正则表达式介绍

1.1 概念解释

正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
以上百度百科抄袭【传送门

1.2 引擎
  • DFA
  • 传统型NFA
  • POSIX NFA

详细介绍还是继续看百度百科吧 (>﹏<) 【 传送门

2. 正则表达式使用

2.1 表达式总览
总览表
2.2 常用元字符
2.2.1 内容性字符
字符 理解
.(点) 匹配任意单个字符。
\w 单词字符,大多数情况下可等同[A-Za-z0-9_],有得引擎可匹配中文,有的不可以,如果在特殊情况下需要进行测试
\d 数字,等同[0-9]
\b 单词边界,即排除\w以外的字符
\W \D \w, \d 互斥集合
\s 空白字符,等价与[\f\n\r\t\v], 互斥集合\S
2.2.2 功能性字符
字符 理解
[] 区间段,比如[A-Fa-f0-7]、[aui391],前后字符ascii码值大小不可颠倒。
^ 匹配字符开始的位置。 如果在[]里使用则表示匹配字符不再区间内,例如[^\d]标识匹配除\d以外的字符。
$ 匹配字符的结束位置。
+,?,* 表达式的出现次数或重复次数(不明确次数)。 +表示表达式出现1次或重复多次; ?表示表达式出现0次或1次; *表示表达式出现任意次数
{n}, {n,m}, {n,} 表达式出现的次数(明确的次数)。{n}表示出现n次,{n, m}表示出现n到m次,{n,}出现大于n次
\ 转义符
() 分组获取,可使用$1...$99(最大数百度百科上是9)获取到分组匹配的结果,具体可以看总览表。
逻辑或,表达式的顺序会影响匹配结果,会将最先匹配到的结果返回
(?=pattern) 非获取匹配,匹配单词中的一部分,该匹配部分紧邻后部分需要符合pattern表达式
(?!pattern) 非获取匹配,匹配单词中的一部分,该匹配部分紧邻后部分不符合pattern表达式
(?<=pattern) 非获取匹配,匹配单词中的一部分,该匹配部分紧邻前部分需要符合pattern表达式
(?<!pattern) 非获取匹配,匹配单词中的一部分,该匹配部分紧邻前部分不符合pattern表达式

2.3 使用技巧

正则表达式不支持逻辑计算。
编写正则表达式的思路:

  1. 观察需要匹配的文本特点和规律。
  2. 尝试性编写正则表达式,由简入深的编写。
  3. 反复测试正则表达式和完善表达式。
单次匹配

单词列表

 house
 write
 first
 so
 these
 her
 long
 picture
 point
 animal
 again
 us
 try

查找长度5,第二个字符是o的单词
.o...(这样匹配的时候会匹配上部分文本,以下有解决方法)

第二位是o或i的单词
.[oi]...
该表达式会匹配picture、animal的部分,解决这个问题可以在表达式两边加上\b, 结果
\b.[oi]...\b

子表达式和重复匹配

子表达式是表示一个复杂匹配的单元,使用()括起来的一组复杂的正则表达式。
这里写一个正则来匹配正确的IP地址作为。
((\d|[12]\d|1\d\d|2[0-4]\d|25[0-5])\.)((\d|[12]\d|1\d\d|2[0-4]\d|25[0-5])\.)((\d|[12]\d|1\d\d|2[0-4]\d|25[0-5])\.)(25[0-5]|1\d\d|2[0-4]\d|[12]\d|\d)等价于
((\d|[12]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(25[0-5]|1\d\d|2[0-4]\d|[12]\d|\d)

以上(\d|[12]\d|1\d\d|2[0-4]\d|25[0-5])((\d|[12]\d|1\d\d|2[0-4]\d|25[0-5])\.)是子表达式。

回溯引用

回溯引用需要将要匹配的表达式分组。以下给出两个示例。

  1. 匹配Html的中的h标签的文本段落
 <h1>h1段落</h1>
 <h1>h1段落</H1>
 <h2>h21段落</h1>
 <h2>h2段落</h2>

正确匹配的正则表达式<([Hh][1-6])>.*</\1>其中\1就是回溯的([Hh][1-6])表达式。

  1. 查找文本中的相邻重复单词
    文本
This is a block of of text, serveral words here are are repeated, and and they should not be.

表达式[ ](\w+)[ ]+\1,会 将以上文本中的of ofare areand and查找出来。

  1. 回溯替换,以下使用js代码作为示例了
 var str = '2016-02-16';
 var reg = /(\d{4})-(\d{2})-(\d{2})/;
 var ret = str.replace(reg, "$1-$3-$2");
 console.log(ret);
贪婪匹配和非贪婪匹配

贪婪匹配,尽可能多的匹配文本,正则表达式默认启用的就是贪婪模式, +和都是贪婪匹配的字符;而非贪婪匹配,则是尽可能少的匹配文本,启用非贪婪模式则使用*?。

文本aaaaa
使用a+(贪婪模式)则会匹配整段文本
而使用a+?只则匹配文本中的单个a字符;

html <div>第一段文本html内容</div><div>第二段html内容</div>
<div>.*</div>表达式会匹配整段代码,即贪婪模式。
<div>.*?</div>表达式只会匹配 <div>第一段文本html内容</div>,即非贪婪模式。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • 简介/声明 为什么要写此文呢?稍微有点Web基础的同学应该都知道网页的表单大多都要做表单验证。而正则表达式正好可以...
    Airmole阅读 1,669评论 4 21
  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 2,145评论 0 9
  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 4,006评论 0 20
  • 注:本篇文章只为方便查看,特此保留,如有冒犯,敬请谅解!!! 本文目标 30分钟内让你明白正则表达式是什么,并对它...
    阿杰Alex阅读 1,483评论 0 10
  • 推荐几个正则表达式编辑器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1阅读 11,488评论 9 151