1. 正则表达式的两种用途:搜索和替换。
2. 搜索有两种情况,一种是根据提供的字符串搜索以寻找一个匹配。一种是子字符串搜索,会得到多个匹配的子字符串。
3. 验证某个模式能否获得预期的匹配结果并不困难,但如何验证他不会匹配到你不想要的东西就比较困难了
4. 贪婪型元字符和懒惰型元字符的区别:
*和+都是贪婪型元字符,他们在进行匹配的时候,行为模式是多多益善而不是适可而止。它们会尽可能的从一段文本的开头一直匹配到这段文本的末尾,而不是从这段文本的开头匹配到碰到第一个匹配时为止
贪婪型:
懒惰型:
5. \b 和\B 的区别
6. 回溯引用:前后一致匹配
子表达式除了可以用在重复匹配操作中以外,还可以在模式的内部被引用。这种引用被称为回溯引用。
1. 匹配前面出现的内容,使用"\数字"或者"$数字"
2. 替换:
2.1. 将email地址替换为链接形式
2.2. 电话号码格式替换
2.3. 大小写转换:
7. 向前向后查找
1. 正向前查找: ?= 的用法,表示后面的字符需要正确匹配,但不进行消费
2. 正向后查找: ?<= 的用法。表示匹配到后面的字符,但是不消费这个资费
3. 正向前向后查找
8. group(0)表示匹配到的内容,group(1)表示第一个()中的内容,以此类推
9. 负向前向后查找
只查找数量,不包含金额
10. 条件查找
1. 用于查找北美电话格式,即第一条和第二条:^(\()?\d{3}(?(1)\)|-)\d{3}-\d{4}$
2. 前后条件查询
附录:
\d 和\D
| \d 表示 0 到 9 之间的一个数字,而\D 则是\d 的补集,表示 0 到 9 以外的任意一个字符 |
\w 和\W | \w 表示字母、数字、下画线中任意的一个字符,而\W 则表示除字母、数字、下画线之外的任意一个字符 |
\s 和\S | \s 表示任意一个空白字符,如空格、制表符、换页符等,而\S 表示空白字符以外的任意一个字符 |
\d | [0-9] |
\D | [^0-9] |
\w | [A-z0-9] |
\W | [^A-z0-9] |
\s | [\t\n\r\f] |
\S | [^\t\n\r\f] |
S? | 表示指定的字符或组最多出现一次,可以没有 |
S+ | 表示指定的字符或组至少出现一次,多了不限 |
S* | 表示指定的字符或组可以出现任意次,包括不出现 |
{n} | 表示指定的字符或组必须出现 n 次 |
{m,n} | 表示指定的字符或组最少出现 m 次,最多出现 n 次 |
{n,} | 表示指定的字符或组最少出现 n 次,多了不限 |
. | 表示任何字符 |
[] | 表示范围 |
| | 表示或 |
() | 表示组的概念。如a(b|be)c |
^ | 只有^在[]内,并且紧跟在[之后的才表示是否字符,否则表示字符串的开头。 |
\b
| 匹配一个单词的开始或结尾。比如\ba 匹配以a开头的内容,a\b匹配以a结尾的内容 |
\B
| 匹配不是单词边界的连接符 |
(?m)
| 启用分行匹配模式。在该模式下^不仅匹配到正常的字符串开头,还将匹配到分隔符(换行符)后的开始位置。但有许多正则表达式不支持 |
\1
| 表示前面第一个子表达式(用()括起来的部分)。\2 表示前面第二个子表达式。以此类推 |
\l
| 把下一个字符转成小写 |
\L
| 把\L到\E之间的字符转成小写 |
\u
| 把下一个字符转成大写 |
\I
| 把\L到\E之间的字符转成大写 |
?=
| 正向前查找 |
?<=
| 正向后查找 |
?!
| 负向前查找 |
?<! | 负向后查找 |
?(A)B | if A 存在 then B |
?(A)(B|C)
| if A 存在 then B,else C |