概念
正则表达式是一种模式语言。
基础语法
完整的正则表达式由两种字符构成。特殊字符(“元字符”)和其他普通字符。
元字符
^ 行的开始
实例 | 意义 |
---|
^cat | 匹配以c作为行的第一个字符,紧接一个a,紧接一个t的文本 |
$ 行的结束
实例 | 意义 |
---|
cat$ | 匹配以t作为行的最后一个字符,其前面紧接一个a,紧接一个c的文本 |
^cat$ | 匹配以一行只有cat的文本 |
^$ | 匹配空行 |
[…](字符组)匹配若干字符
实例 | 意义 |
---|
gr[ea]y | 匹配grey or gray |
[123456] | 匹配1-6中的任意一个字符 |
- (字符组内元字符)匹配范围
实例 | 意义 |
---|
[1-6] | 匹配1-6中的任意一个字符 |
[a-z] | 匹配a-z中的任意一个字符 |
[0-9A-Z_!.?] | 匹配一个数字,大写字母,下划线,感叹号,点号或者问号 |
^ (字符组内元字符) 非(排除)匹配
. 匹配任意字符
实例 | 意义 |
---|
123.567 | 匹配123x567,其中x为任意字符 |
| 多选结构
实例 | 意义 |
---|
123|567 | 匹配123或者567 |
12(3|5)67 | 匹配12367或者12567 |
\< 和 \>
单词分界符
实例 | 意义 |
---|
\<cat\> | 匹配cat这个单词 |
\<cat | 匹配以cat为开头的单词 |
cat\> | 匹配以cat为结尾的单词 |
? 可选项元素
实例 | 意义 |
---|
color? | 匹配colo 或者 color |
w(inton)? | 匹配w 或者winton |
+ 重复元字符
实例 | 意义 |
---|
color+ | 匹配color 或者 colorr 或者colorrr(可以有任意个r,但至少又一个) |
* 重复元字符
实例 | 意义 |
---|
color* | 匹配colo 或者 color 或者colorrr(可以有任意个r,可以是0个) |
{} 限定重复次数
实例 | 意义 |
---|
[a-zA-Z]{5} | 匹配长度为5的字母串 |
[a-zA-Z]{1,5} | 匹配长度为1到5的字母串 |
() 范围限定符,反向应用
范围限定
实例 | 意义 |
---|
w(inton)? | ?的作用范围,限定子在括号上,匹配w 或者winton |
反向引用(配合 \number 使用)
实例 | 意义 |
---|
([a-z])([0-9])\2\1 | 匹配重复字串如 a00a,b99b.\2 表示第二个括号匹配到到内容,以此类推 |
\ 转义字符(即 需要将元字符当普通字符时,使用? 表示普通字符问号)
ps:Mac os 上,实际是\?
才表示元字符,而?则表示普通字符,通过grep做当验证
一些特殊的元字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
普通字符
这个就没啥好说的了
实战案例
//匹配中文
^[\\u4e00-\\u9fa5]{0,}$
//非中文
^[^\\u4e00-\\u9fa5]{0,}$
//金额校验
^[0-9]+(.[0-9]{2})?$
//匹配时分秒
([01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d
结尾
看完这篇,我相信你已经和我一样,能够自己写简单的正则匹配了。但是冰冻三尺,非一日之寒,要想更熟练的掌握,必须在日常工作中实践, 希望有帮助到看到此文的同学,也欢迎大家进群讨论!