正则表达式必知必会-笔记

一、基本元字符

  • . (匹配任意单个字符)
  • | (逻辑或操作符)
  • [] (匹配字符集合中的一个字符)
  • [^] (对字符集合求非) [^0-9] //表示非数字字符
  • - (定义一个区间,必须放在[]中) [a-z] //表示字母a-z
  • (对下一个字符转义)

二、元字符

  • d (匹配任意数字字符)
  • D (d的反义)
  • (换行符)
  • (回车符)
  • s (匹配一个空白字符)
  • S (s的反义)
  • (制表符)
  • w (匹配任意字母数字或下划线)
  • W (w的反义)

三、数量元字符

  • * (匹配前一个字符或子表达式的>=0次重复)
  • + (匹配前一个字符或子表达式的>=1次重复)
  • (匹配前一个字符或子表达式的0次或1次重复)
  • {n} (匹配前一个字符或子表达式的n次重复)
  • {m,n}(匹配前一个字符或子表达式的m至n次重复)
  • {n,} (匹配前一个字符或子表达式的>=n次重复)
  • *? (*的懒惰型版本)
  • +? (+的懒惰型版本)
  • {n,}?({n,}的懒惰型版本)

匹配一个电子邮箱

w+[w.]*@[w.]+.w+
//可以匹配ben@forta.com和ben.forta@forta.com

防止过度匹配(懒惰型版本)

<b>one</b> and <b>two</b>
//正则表达式 <b>.*</b>
//结果一行全匹配了
//正则表达式 <b>.*?</b>
//结果 <b>one</b>和<a>two</b>分开匹配到

四、位置元字符

  • ^ (匹配字符串的开头)
  • $ (匹配字符串的结尾)
  •  (匹配单词边界)(位于与w相匹配的字符和与W相匹配的字符之间)

例如

the cat scattered his food all over the room
//正则表达式 cat
//结果只匹配cat,不匹配scattered里面的cat

五、回溯引用和前后查找

  • () (定义一个子表达式)
  • 1 (匹配第1个子表达式,2代表第2个子表达式,依此类推)
  • ?= (向前查找)
  • ?<= (向后查找)

查找IP地址初步版

12.159.46.200(每组数字由1至3个数字组成)
//正则表达式 d{1,3}.d{1,3}.d{1,3}.d{1,3}
//子表达式 (d{1,3}.){3}d{1,3}一样的效果

查找年份

1967-08-17
//正则表达式 19|20d{2}
//结果只匹配19,因为|把左边和右边分别作为一个整体,解析为19或20d{2}
//子表达式(19|20)d{2}
//结果 1967

查找IP地址加强版:每一组数字都在0-255之间(子表达式的嵌套)
规则如下:
1、任何一个1位或2位数字
2、任何一个以1开头的3位数字
3、任何一个以2开头、第2位数字在0-4之间的3位数字
4、任何一个以25开头,第3位数字在0-5之间的3位数字

(((d{1,2})|(1d{2})|(2[0-4]d)|(25[0-5])).){3}((d{1,2})|(1d{2})|(2[0-4]d)|(25[0-5]))

回溯引用:模式的后半部分引用在前半部分中定义的子表达式

this is a block of of text, several words here are are repeated, and and they should not be.
//正则表达式 [ ]+(w+)[ ]+1
//结果 of of 和 are are 及 and and 被匹配

匹配html文本

<h1>one paragraph</h1>
<h2>two paragraph</h2>
<h3>three paragraph</h2>
//正则表达式 <h[1-6]>	.*?</h1>
结果只匹配前两段

回溯引用在替换操作中的应用

313-555-1234
248-555-9999
810-555-90000
//正则表达式 (d{3})(-)(d{3}(-)(d{4}))
//替换 ($1) $3-$5
//结果
(313) 555-1234
(248) 555-9999
(810) 555-90000

向前向后查找(Javascript不支持向后查找)

<p>what a funny day</p>
//正则表达式 (?<=<p>).*(?=</p>)
//结果 what a funny day(没有开始和结束标签)
原文地址:https://www.cnblogs.com/u14e/p/5241549.html