正则表达式必知必会-笔记
一、基本元字符
.(匹配任意单个字符)|(逻辑或操作符)[](匹配字符集合中的一个字符)[^](对字符集合求非)[^0-9] //表示非数字字符-(定义一个区间,必须放在[]中)[a-z] //表示字母a-z\(对下一个字符转义)
二、元字符
\d(匹配任意数字字符)\D(\d的反义)\n(换行符)\r(回车符)\s(匹配一个空白字符)\S(\s的反义)\t(制表符)\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>分开匹配到
四、位置元字符
^(匹配字符串的开头)$(匹配字符串的结尾)\b(匹配单词边界)(\b位于与\w相匹配的字符和与\W相匹配的字符之间)
例如
the cat scattered his food all over the room
//正则表达式 \bcat\b
//结果只匹配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|20\d{2}
//结果只匹配19,因为|把左边和右边分别作为一个整体,解析为19或20\d{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]> .*?</h\1>
结果只匹配前两段
回溯引用在替换操作中的应用
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(没有开始和结束标签)

浙公网安备 33010602011771号