正则表达式基本规则
1、普通字符
包括:字母、数字、汉字、下划线、没有特殊定义的标点符号。
(在匹配一个字符串时,匹配与之相同的一个字符)
2、简单的转义字符
(1)在字母面前加”\”来代替一些不方便书写的字符,匹配与之相同的一个字符
表达式 | 可匹配 |
---|---|
\r | 回车 |
\n | 换行符 |
\t | 制表符 |
(2)在有特殊用处的标点符号前加“\”代表该符号本身,匹配与之相同的一个字符
表达式 | 可匹配 |
---|---|
\ | 匹配”\”符号本身 |
\^ | 匹配”^”符号本身 |
\$ | 匹配”$”符号本身 |
\. | 匹配”.”符号本身 |
\(和\) | 匹配”(“和”)” |
和
<script type="math/tex; mode=display" id="MathJax-Element-37">和</script> | 匹配”[“和”]” |
\{和\} | 匹配”{“和”}” |
\? | 匹配”?”符号本身 |
\+ | 匹配”+”符号本身 |
\* | 匹配”*”符号本身 |
\| | 匹配” |
(3)匹配“多种字符”中任意一个字符的表达式
表达式 | 可匹配 |
---|---|
\d | 任意一个数字:0~9中任意一个 |
\D | 匹配所有非数字字符 |
\w | 任意一个字母数字或下划线:a~z、A~Z、0~9、_中任意一个 |
\W | 匹配所有字母、数字、下划线以外的字符 |
\s | 包括空格、制表符、换页符在内的空白字符中的任意一个 |
\S | 匹配所有非空白字符 |
. | 匹配除了换行符(\n)以外的任意一个字符 |
(4)使用[]自定义能够匹配多种字符的表达式
表达式 | 可匹配 | 举例 |
---|---|---|
[]包含一系列字符 | 匹配[]中包含的任意一个字符 | [ab23@] :可匹配a、b、2、3、@中任意一个字符;[a-g] :匹配a到g之间的任意一个字符 |
[^]包含一系列字符 | 匹配[]以外的任意一个字符 | [^ab23@] :匹配除了a、b、2、3、@意外的所有字符中的一个;[^C-H3-7] :匹配”C~H”、”3~7”之外的任意一个字符 |
(5)修饰匹配次数的特殊符号
表达式 | 作用 | 举例 |
---|---|---|
{n} | 表达式重复n次 | a{2} 相当于aa |
{m,n} | 表达式至少重复m次,最多重复n次 | ab{2,3} 相当于abb 或者abbb |
{m,} | 表达式至少重复m次 | \w\d{2,} 可以匹配a12 ,b23 ,c345 ,d4567 ,… |
? | 匹配表达式0次或者1次 | a[bc]? 可以匹配ab 或者ac 或者a |
+ | 表达式至少出现一次 | a+b 可以匹配ab ,aab ,aaab ,… |
* | 表达式不出现或者出现任意次 | a*b 可以匹配b ,ab ,aab ,aaab ,… |
(6)代表抽象意义的特殊符号
表达式 | 作用 | 举例 |
---|---|---|
^ | 与字符串开始的地方匹配,不匹配任何字符 | ^aa 只能匹配在字符串开头的aa |
$ | 与字符串结束的地方匹配,不匹配任何字符 | zzz$ 只能匹配位于字符串结尾处的zzz |
\b | 匹配一个单词的边界 | .\b 在匹配#@#abc 时匹配到的内容是#a ;\b 本身不匹配任何字符,但是它要求在它在匹配结果中所处的位置一边是\w 一边是非\w |
\B | 匹配非单词边界 | 即左右两边都是\w 或者左右两边都不是\w |
| | 左右表达式之间是“或”的关系,匹配左边或者右边 | a|b 可以匹配a 或者b |
() | 1、在修饰匹配次数时在,整个括号表达式作为一个整体; 2、取匹配结果的时候,括号中的表达式可以被单独得到 | 1、(abc){2} 匹配abcabc ; |
若希望()括号表达式匹配的结果不进行记录,可以使用(?:xxxxx)
形式
正则表达式高级规则
1、匹配次数的贪婪与非贪婪
模式 | 效果 | 用法 |
---|---|---|
贪婪模式 | 尽可能“要匹配” | eg:(d)(\s+) |
非贪婪模式 | 尽可能“不匹配” | 在修饰匹配次数的特殊符号后再加上一个 “?” 号 eg: (d)(\s+?) |
2、反向引用
表达式在匹配时,小括号 “( )” 包含的表达式所匹配到的字符串也会被记录下来【括号表达式的第二个作用】。
可以通过在“\”后面接一个数字,引用前面的括号匹配到的字符串。eg:\1
匹配的是第一对括号内匹配的字符串,\2
匹配的是第2对括号内匹配到的字符串,以此类推。【括号的排序按左括号”(“为准】
3、预搜索&&反向搜索
方法名 | 表达式 | 匹配 |
---|---|---|
预搜索 | (?=xxxx) (?!xxxx) | 所在缝隙右边必须能够匹配xxxx这部分表达式【xxxx不在匹配的表达式范围内】 所在缝隙右边必须不能匹配xxxx这部分表达式 |
反向预搜索 | (?<=xxxx) (?<\!xxxx) | 所在缝隙左边必须能够匹配xxxx这部分表达式 所在缝隙左边必须不能匹配xxxx这部分表达式 |
其他通用规则
形式 | 可匹配 |
---|---|
\xXX | 匹配ASCII码编号在0~255范围的字符。eg:\x21代表”!” |
\uXX | 匹配任何字符 |