文章目录
- 1. 正则表达式(Regular Expression)
- 2. 正则表达式语法: + ,* ,?
- 3. 正则表达式语法 [...]
- 4. 非打印字符
- 5. 特殊字符
- 6. 限定符
- 7. 贪婪和非贪婪
- 8. 定位符
- 9. 选择
- 10. 正则表达式 修饰符
- 11. 元字符 和 正则表达式的优先级
1. 正则表达式(Regular Expression)
正则表达式是用来提高效率的。
常用的几个字符作用:
- ^ 为匹配输入字符串的开始位置。
- + 匹配一个或者多个内容。例如: [0-9] 匹配单个数字,[0-9]+匹配多个数字。
- $ 为匹配输入字符串的结束位置。abc$匹配字母 abc 并以 abc 结尾。
使用了正则表达式可以更加灵活的操作一些内容。
2. 正则表达式语法: + ,* ,?
+ 号代表前面的字符必须至少出现一次(1次或多次):
- 例如:itholm+es ,可以匹配 itholmes,itholmmmes等等。
- 相当于把m+看成一块内容,匹配的有m,mm,mmm等等。
* 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次):
- 例如:itholm*es,可以匹配 itholes , itholmes,itholmmes等等。
- 同理把m*看成一体,可以没有m,可以有一个m,可以有多个m等等。
? 问号代表前面的字符最多只可以出现一次(0次或1次):
- 例如:itholm?es,就只能匹配itholes , itholmes。
- 同样把m?看为一体,只能没有m,可以有一个m。
3. 正则表达式语法 […]
匹配 /[...]/g
中的所有字符:
- 例如:[abc] , 匹配全部的a,b,c字符。
匹配除了 /[^...]/g
中字符的所有字符:
- 例如:[^abc] , 匹配除了a,b,c字符的所有字符。
/[A-Z]/g
表示一个区间,匹配所有大写字母,/[a-z]/g
表示所有小写字母:
- [A-Z]匹配所有的大写字符,[a-z]匹配所有的小写字符。
/./g
匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r]
。
- \r是回车,前者使光标到行首,(carriage return)
- \n是换行,后者使光标下移一格,(line feed)
- \r 是回车,return \n 是换行
/[\s]/g
和 /[\S]/g
- \s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
/\w/g
匹配字母、数字、下划线。等价于 /[A-Za-z0-9_]/g
- 适用于登录场合等等。
4. 非打印字符
像\f,\n等等非打印字符,都可以通过正则表达式来查找。
5. 特殊字符
6. 限定符
需要注意格式:
举个例子: /[1-9][a-z][A-Z][0-9]*[a-z]*/g
解释如下:
上面匹配的内容:
- 第一个字符1到9
- 第二个字符a到z
- 第三个字符A到Z
- 第四个0到9,但是因为有* 所以是0到9以及后面多个数字(也是0-9的)。
- 第五个a到z,同样也是有* 所以是a到z以及后面多个字符(也是a-z的)。
总结起来就是一一对应,注意特殊字符的含义!
设置0~99的两位数的正则表达式:
/[0-9]{1,2}/
匹配[0-9]的一位数或者两位数。- 这种匹配方式的缺点是:只能匹配两位数字,而且可以匹配 0、00、01、10 99 的章节编号仍只匹配开头两位数字。
改进:
/[1-9][0-9]?/
或者/[1-9][0-9]{0,1}/
, 这样就可以避免上面的内容了。
7. 贪婪和非贪婪
* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。
8. 定位符
9. 选择
用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔。
() 表示捕获分组,() 会把每个分组里的匹配的值保存起来。
之后就是?=、?<=、?!、?<! 的使用。
见https://www.runoob.com/regexp/regexp-syntax.html。
10. 正则表达式 修饰符
11. 元字符 和 正则表达式的优先级
*元字符就是上面说到的一系列的字符,\ ,^ $,等等。
优先级越是在外面包裹的字符优先级越高。