元字符
符号 | 意思 | 示范 | 详例 |
\d | 任意一个数字 | \d{2}-\d{8} | 22-12345678 |
* | *前的符号重复任意次数 次数可以为零 | \d* | 222222222222... 或 2 |
\s | 任意的空白符 全半角空格,tab,换行符 | \bhi\b\s\bLucy\b | hi Lucy |
+ | 和*用法相似 次数>=1 | \d+ | 22 2222 |
\w | 匹配任何单词字符串 等价于[A-Z a-z 0-9] | \d{2}\w\s\d{6} | 22h 222222 222 222222 22_ 222222 |
^ | 匹配行的开始 | ^\d{2} | 匹配元:wwwwww22wwwwwww 匹配结果:22 |
$ | 匹配行的结束 | [a-z]{2}$ | 匹配元:2222222kfjda999999999 匹配结果:kf |
? | 重复0或1次 | ^2?$ | 匹配元:6dfadfhah22222jdfkajldkf9 匹配结果:22 |
分枝条件 | 符合
稍微知晓编程的人都懂得,|符号的意思是或。
0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。
但是也要注意分支条件的顺序
例如:
美国就邮政编码是5位数字或5位数字-4位数字
因此就可以用\d{5}-\d{4}|\{5}进行匹配
但是如果写成\d{5}|\d{5}-\d{4}|
那么就只会匹配5位的邮编(以及9位邮编的前5位)
反义
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
分组
我们可以对某个单词进行重复匹配,那么对一组字符串又该如何重复匹配呢??我们可以在需要匹配的正则外面加上小括号加以分组。
比如:
(\d{3}.){3}\d{4},这个表达式就能匹配出173.169.111.9999