《正则表达式必知必会》笔记

1.什么是正则表达式
正则表达式是一些用来匹配和处理文本的字符串。

2.正则表达式区分大小写

3.命令行选项
(1) g (global,全局)
激活全局搜索功能;
将返回一个包含着所有匹配的结果数组;
(2) i
让匹配操作不区分字母的大小写;
强制执行一次不区分字母大小写的搜索;

4.元字符 一些在正则表达式里有特殊含义的字符
(1) .
可以匹配任何一个单个的字符、字母、数字甚至是 . 字符本身(换行符除外)

例如:c.t 进行的搜索将能匹配到cat、cot、c.t等
同一个正则表达式里允许使用多个 . 字符
例如:…将匹配任意两个字符

(2) \ (转义)
表示"这个字符有特殊含义,而不是字符本身含义"
放在有特殊含义的字符序列的开头
(3) [ ] 匹配多字符中的某一个
这两个元字符之间的所有字符都是该集合的组成部分,字符集合的匹配结果是能够与该集合里的任意一个成员相匹配的文本
(4) - 连字符
字符区间可以用 - 定义

例如: [0-9] 匹配从0到9的所有数字
[A-Z] 匹配从A到Z的所有大写字母
[a-z] 匹配从a到z的所有小写字母
[A-F] 匹配从A到F的所有大写字母

在同一个字符集合可以给出多个字符区间

例如:[A-Za-z0-9]

注:不可以让尾字符小于它的首字符
(5) ^ 取非匹配
对一个字符集合进行取非匹配

例如:[^0-9] 匹配任何不是数字的字符

注:^的效果将作用于给定字符集合里的所有字符或字符区间,而不是仅限于紧跟在^字符后面的那一个字符或字符区间
(6) | 或匹配
注:| 会将左右两个部分都当成一个整体看待

例:19 | 20 \d{2} 将解释为19或20\d{2}

注:一般来说,当在字符集合中使用的时候,元字符将被解释为普通字符
其他情况,例如 / ,为了不必要的麻烦,使用时最好转义

5.空白元字符 匹配各种空白字符的元字符
[\b] 回退(并删除)一个字符(Backspace键)
\f 换页符
\n 换行符
\r 回车符
\t 制表符(Tab键)
\v 垂直制表符

\r\n匹配一个"回车+换行"组合,是Windows所使用的文本行结束标签

6.字符类 匹配某一类别的字符
(1) 数字与非数字
\d 任何一个数字字符(等价于[0-9])
\D 任何一个非数字字符(等价于[^0-9])
(2) 字母和数字与非字母和数字
\w 任何一个字母数字字符(大小写均可)或下划线字符(等价于[a-zA-Z0-9_])
\W 任何一个非字母数字字符或下划线字符(等价于[^a-zA-Z0-9_])
(3)空白字符与非空白字符
\s 任何一个空白字符(等价于[\f\n\r\t\v])
\S 任何一个非空白字符(等价于[^\f\n\r\t\v])
注:用来匹配退格字符的[\b]元字符是个特例,不在类元字符\s、\S的覆盖范围内

7.匹配十六进制或八进制数值
(1) \x 十六进制值
(2) \0 八进制值

8.POSIX字符类
[:alnum:] 任何一个字母或数字(等价于[a-zA-Z0-9])
[:alpha:] 任何一个字母(等价于[a-zA-Z])
[:blank:] 空格或制表符
[:cntrl:] ASCII控制字符(ASCII0到31,再加上ASCII127)
[:digit:] 任何一个数字(等价于[0-9])
[:graph:] 和[:print:]一样,但不包括空格
[:lower:] 任何一个小写字母(等价于[a-z])
[:print:] 任何一个可打印字符
[:punct:] 既不属于[:almun:]也不属于[:cntrl:]的任何一个字符
[:space:] 任何一个空白字符,包括空格(等价于[\f\n\r\t\v ])
[:upper:] 任何一个大写字母(等价于[A-Z])
[:xdigit:] 任何一个十六进制数字(等价于[a-fA-F0-9])
使用:

例:[[:alnum:]]

9.重复匹配
(1) + 匹配一个至多个字符(至少一个)

例: a+ 将匹配一个或多个连续出现的a
[0-9]+ 将匹配一个或多个连续的数字

注:给一个字符集合加上+后缀的时候,必须把+放在这个字符集的外面
(2) * 匹配零个或多个字符(可零个)
(3) ? 匹配零个或一个字符
(4) { }
① 匹配的重复次数

例: [0-9]{3} 三个连续的数字

② 可为重复匹配次数设定一个区间

例: [0-9]{2,4} 最少重复两次,最多重复四次

③ 匹配“至少重复多少次”

例: [0-9]{3,} 至少重复三次

注:* 和 + 都是所谓的“贪婪型”元字符,他们在进行匹配时的行为模式都是多多益善而不是适可而止。他们会尽可能的从一段文本的开头一直匹配到这段文本的末尾,而不是从这段文本的开头匹配到第一个匹配时为止。

例如: 文本:aaaabbbb
正则表达式: <[Bb]>.*</[Bb]>
将会匹配到 bbbb

在不需要这种“贪婪行为”时,使用这些元字符的“懒惰型”版本。(“懒惰在这里的含义是匹配尽可能少的字符”)
懒惰型元字符写法: 贪婪型元字符加上 ?后缀
常用的贪婪型元字符和它们的懒惰型版本:
* *?
+ +?
{n,} {n,}?

10.单词边界
(1) \b 匹配一个单词的开始或结尾,只匹配一个位置,不匹配任何字符
\b匹配的是与\w相匹配的字符和与\W相匹配的字符之间的位置
(2) \B 不匹配一个单词边界

11.字符串边界
^ 定义字符串的开头

例: ^\s* 匹配一个字符串的开头位置和随后的零个或多个空白字符

$ 定义字符串的结尾

例: \s*$ 匹配一个字符串结尾处的零个或多个空白字符串

如果与(?m)配合使用,^和$将匹配在一个换行符处开头或结束的字符串(此时,换行符将被视为一个字符串分隔符)

12. () 子表达式
将子表达式当做一个独立元素使用

例:(&nbsp;){2, }
寻找ip地址:
\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
相当于:(\d{1,3}.){3}\d{1,3}

13.回溯引用匹配

例:[ ]+(\w+)[ ]+\1
当匹配到单词of时,\1也匹配单词\of;当匹配到单词and时,\1也匹配单词\and;
即\1代表模式里的第1个子表达式,\n表示模式里的第n个子表达式
例:匹配html标题:
<Hh>.*?</[Hh]\1>

注:JavaScript中用$代替\

14.回溯引用替换

例1:将原始文本里的电子邮件地址全都转换为可点击的链接
文本:Hello,ben@forta.com is my email address.
正则表达式:(\w+[\w\ . ]*@[\w\ . ]+\ . \w+)
替换:<A HREF=“mailto:$1”>$1
例2:电话号码被保存为313-555-1234,现将其重新排版为(313)555-1234
正则表达式:(\d{3})(-)(\d{3})(-)(\d{4})
替换:($1)$3-$5

15.大小写转换
用来进行大小写转换的元字符:
\l 把下一个字符转换为小写
\L 把\L到\E之间的字符全部转换为小写
\u 把下一个字符转化为大写
\U 把\U到\E之间的字符全部转化为大写
\E 结束\L或\U转换

例:把一级标题(<H1>…</H1>)的标题文字转化为大写
文本:<H1>Welcome</H1>
正则表达式:(<[Hh]1>)(.*?)(</[Hh]1>)
替换:$1\U$2\E$3

16.向前查找
指定了一个必须匹配但不在结果中返回的模式
?= 开头

例:http://www.forta.com/
正则表达式:.+(?=:)
结果:http://www.forta.com/ (http出现在匹配结果里)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值