正则表达式使用笔记

由于最近接手一个代码使用正则表达式匹配location做不同环境的配置,由是又双叒叕看不懂正则,第N次去看正则相关的材料,所以觉得还是应该知其所以然,系统学习一下,并做下总结。

图书材料 :《学习正则表达式》

What

正则表达式是描述一组字符串特征的模式,用来匹配特定的字符串。
—— Ken Thompson

Regular Expression的“Regular”一般被译为“正则”、“正规”、“常规”。此处的“Regular”即是“规则”、“规律”的意思,Regular Expression即“描述某种规则的表达式”之意。 —— 维基百科

这个网站很方便做正则的测试:http://www.regexpal.com/

How

下面讲解一下常用的正则语法
正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。

原义示例: 正则表达式:hello,对hello world的匹配结果为 hello world

元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

简单点:元字符不参与匹配,其表示的特殊意义作为规则匹配

元字符

元字符 作用 示例 匹配结果(用超链接样式做为匹配标志)
. 匹配任意字符 . aBc.:x
\ 转义符下一个字符标记为
一个特殊字符
或一个原义字符
或一个后向引用
或一个八进制
\.
其余后面分别详细讲解
aBc.:x匹配真正的.
| 或操作 [3|5] 12345
^ 行起启锚位符
非,不匹配指定字符或字符组
^1
[^12]
1211
31245
$ 行结束锚位符 1$ 1211
? {0,1}匹配前面字符 0次或1次 21? 2
21
(无论是否有1都会被匹配)
* {0,n} 0次或多次 21* 2
21
211111
+ {1,n} 1次或多次 21+ 2(没有1时不会被匹配)
21
211111
{} 量词或代码块 a{3}
a{2,5}
aaabaa (3个a,2个不会被匹配)
aaabaa (2到5个a会被匹配)
[] 字符组(字符集:一类字符的集合) [abc]
字符范围[a-z]
dabec
a-z任意小写字母
同理有:[A-Z],[0-9],[a-zA-Z]
() 分组,子表达式,优先 ([ab])x\1 axa
bxb
axb
\1指代前面的[ab]这个子表达式的匹配值
- 分隔线 - -
以下一些由\开头的特殊意义字符 注意有时需要"\\"来转义为\与后面的字符配合成新的意义使用
\b 单词边界,表示单词的起始 \baaa\b
\baaa
baaa aaa aaab
baaa aaa aaab
\B 非单词边界 \Baaa\B baaa aaa baaab aaab
\d 数字 \d 124SA236SFa
\D 非数字 \D 124S<:">A236SFa
\s 匹配任何空白字符,包括空格、制表符、换页符等等。 \s 等价于[ \f\n\r\t\v] (后续介绍)
\S 匹配任何非空白字符 \S 等价于[^\f\n\r\t\v]
\w 匹配包括下划线的任何单词字符。 等价于[A-Za-z0-9_]
\W 匹配任何非单词字符。 等价于[^A-Za-z0-9_]
tip 大小写表示的含义相反
\f 匹配一个换页符 等价于\x0c和\cL
\n 匹配一个换行符 等价于\x0a和\cJ
\r 匹配一个回车符 等价于\x0d和\cM
\t 匹配一个制表符 等价于\x09和\cI
\v 匹配一个垂直制表符 等价于\x0b和\cK
tip 多用于支持正则查找替换的编辑器
\xn 匹配n,其中n为字符的十六进制值。十六进制转义值必须为确定的两个数字长。 \x41
\x401
A
等价于\x04&1正则表达式中可以使用ASCII编码。
\num 标识一个八进制转义值或一个向后引用。
如果\n之前至少n个获取的子表达式,则n为向后引用[1]
否则,如果n为八进制数字(0-7),表示字符的进制值。[2]
(.)\1

\101
匹配两个连续的相同字符aa bb ccda
A
\uxxxx 字符的Unicode值 \u00A9 © 版权符号
优先级 符号
最高 \
( )、(?: )、(?= )、[ ]
*、+、?、{n}、{n,}、{m,n}
^、$、经\转义的
最低 |

其它

  • 贪婪型,懒惰型元字符
    * 和+,{n,} 贪婪型元字符,它们在进行匹配时的行为模式是多多益善而不是适可而止的。
    *?,+?,{n,}? 懒惰型元字符(上面的加?后缀) 适可而止
    例:字符串 123456
    3\d+匹配结果:123456 3及其以后的数字全被匹配,多多益善
    3\d+?匹配结果:123456 3及其后的一个数字被匹配,适可而止

  • 前后查找 有时候需要正则表达式标记要匹配的文本的位置(而不仅仅是文本本身)

  1. (?=) 正向前查找 其实就是一个以?=开头的子表达式
  • (?<=)正向后查找 查找出现在匹配文本之后的字符(js不支持)
  • (?!) 负向前查找 指的是不与给定模式相匹配的文本 不常用
  • (?<!)负向后查找 同上
    例:.{2}(?=(abc)) 结果 xxxabc (abc前面的两个字符)
    (?<=al).*(?=xl) 结果alcccxl (al与xl中间的字符 )

实例

掌握上面的这些基础理论,应该就可以应付正则的大部分使用场景,能看能写。

运行效果。好累,感觉再也不会写这种傻逼彩蛋了
快速去掉双引号

小结

正则的语法还是比较简单易懂的,只是用的频率不是那么高,所以容易忘,所以做下笔记,以后忘了看自己写的东西终归是更容易理解,也希望对大家有帮助。


  1. 向后引用(back-reference)一个子字符串(substring),该子字符串与正则表达式的第num个用括号围起来的子表达式(subexpression)匹配。其中num是从1开始的正整数,其上限可能是99

  2. 此处八进制的值为0-277对应ASCII码的八进制值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容