匹配 以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字,例如:029-88888888
简单粗暴版:
0\d\d-\d\d\d\d\d\d\d\d
\d:匹配一个数字等价于 [0-9]
优雅版:
0\d{2}-\d{8}
\d 后面的{2},{8} 表示前面的 \d 必须连续匹配 2次 ,8次
匹配以字母 x 开头,中间是数字,字母,下滑线组成的字符串
\bx\w*\b
或
\bx\w+\b
\b 匹配一个单词的边界,也就是指单词和空格之间的位置。例如:abc\b 可以匹配aabc中的abc,不能匹配abca中的abc
这里的 \w* 和 \w+,* 和 + 都是类似的元字符,不同是的 * 匹配重复次数为 0-任意次,+ 匹配的 1-任意次
匹配 6-10 位数组字母下滑线字符串,第一位必须为字母
^[a-zA-Z]\w{5,9}$
元字符 ^ 和 $ 都表示匹配一个位置,这个和 \b 有点类似,^ 匹配一个字符串的开始,$ 匹配一个字符串的结束
[a-zA-Z] 表示匹配一位 英文字母(大小写都可以)
\w{5,9} 表示匹配最小5位,最大9位的数字字母下划线组成的字符串
[a-zA-Z] 匹配一位,\w{5,9} 匹配 5-9位,最小为 1+5=6,最大为 1+9=10,所以是匹配 6-10 位。
字符转意
有时候可能有匹配元字符. 或者 * 或者 \w 或者 \d 等,例如: C:\window 如果直接匹配 C:\window,就会出现问题,因为 \w 会被表示为别的意义,\w 在正则表达式中是匹配数字字母下划线,例如:C:_indow,C:2indow 这样的字符串才会被匹配,因此就需要 \ 来取消这些字符的的含义,例如:\. \* \\w
匹配: C:\windows 带有元字符的字符串
通过 \ 将 \w 进行转义 C:\\windows 才可以匹配
匹配几种格式的电话号码,(030)66666666,或099-58965878,或16899999999
\(?\d{3}[)-]?\d{8}
分解一下:
?:前面的字符匹配 0 次 或者 一次
\(?:\( 是将元字符 ( 进行转义,? 匹配 0 次或者一次 (
\d{3}:匹配 3 次 0-9 的数字 相当于 [0-9]{3}
[)-]?:) 和 - 各匹配 0 次 或者一次
\d{8}:匹配 8 次 0-9 的数字
上面的表达式看似完美,但是像这种 030)66666666,(030-66666666 不正确的格式也能匹配,这个时候急需要用到【分支条件】,正则表达式里的【分支条件】是指有几种匹配规则,只要满足一种规则就视为匹配了,具体方法就是使用 | 把规则分开。
例如:匹配上面的电话号码,可以分为两块
\(\d{3}\)\d{8}|\d{3}[-]?\d{8}
反义
有时候可能要查询不属于某个范围内的字符,比如想配置除了 a,b,c 字符外的所有字符,可以这样写 [^abc]
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^a] 匹配除了x以外的任意字符
[^abcde] 匹配除了aeiou这几个字母以外的任意字符
网友评论