快速掌握正则表达式

前言

正则是一把利器, 用好了编程事半功倍

但估计很多小伙伴初学正则时已经被其奇形怪状的字符给劝退了, 今天我们来将其解剖一下

三个部分

正则主要包含三个部分:

  • 小括号() : 表示分组
  • 中括号[] : 表示需要匹配的单个字符 以及表示区间范围或者随机样本
  • 大括号{}: 表示重复出现的次数

比如:

1
2
3
4
a{3}b{2}

或者
[a]{3}[b]{2}

表示字符a重复出现3次 字符b重复出现2次

可匹配以下字符串:

1
aaabb

如果我想将字符a和字符b分离, 可以使用小括号分组功能, 比如:

1
2
3
4
(a{3})(b{2})

或者
([a]{3})([b]{2})

那么$1表示取出第一组内容aaa, $2取出第二组内容bb

在匹配单个字符的时候, 中括号写与不写都一样, 中括号主要的作用在于区间匹配和样本匹配:

区间匹配:

使用字符-表示区间

1
2
3
[a-z] //表示匹配小写a到z的26个英文字母 但凡出现26个字母中的任何一个 都匹配成功

[a-zA-Z0-9] //表示匹配大小写26个字母加上0到9十个数字中的任何一个

样本匹配:

提供一个有限个数的字符的样本, 然后在样本中随机匹配

1
[abcd] //表示匹配abcd这四个英文字母中任意一个

举例:

假如我写了一个正则表达式如下:

1
[ab][cd]

那么它将匹配到四个:

1
2
3
4
ac
ad
bc
bd

是不是感觉像排列组合, 没错

在样本匹配模式下, 中括号中的内容相当于取或, 在正则中取或有一个专门的符号, 用|表示

1
2
3
4
5
6
[ab] 匹配a或b 
a|b 匹配a或b


那么:
[ab][cd] 也可以写成 (a|b)(c|d)

至此, 正则最核心的功能我们就学完了

扩展部分

关于出现次数:

  • 字符?: 表示重复出现零次或一次

  • 字符*: 表示出现零次或多次

  • 字符+: 表示出现一次或多次

示例:

1
2
3
a?b   //可以匹配b 和ab
a*b //可以匹配b 或者a....b
a+b //可以匹配ab 或者a....b

如果放中括号中:

1
2
3
[a?]   //可以匹配a或者?
[a*] //可以匹配a或者*
[a+] //可以匹配a或者+

也就是说一旦放到中括号中, 这三个字符将失去表示次数的含义, 成为一个普通的匹配字符

关于匹配内容:

  • 字符.: 表示匹配除了回车和换行外的任意字符
  • 字符^: 表示限定开头内容
  • 字符$: 表示限定结束内容

我们挨个举例说明:

1
.{3}b  //表示任意字符出现三次然后再出现b

可以匹配到以下内容:

1
2
3
4
5
aaab
xxxb
yyyb
kjfb
...

如果我加个^:

1
^1.{3}b //表示需要匹配的内容必须以1开头

假如我有两个字符串变量:

1
2
String data1="1aaab"; //匹配成功
String data2="gg1aaab"; //匹配失败

如果我去掉这个^:

1
1.{3}b

那么:

1
2
String data1="1aaab"; //匹配成功
String data2="gg1aaab"; //匹配成功

也就是说^这个限定符, 是针对整个字符串进行匹配, 需要整体满足条件, 而不加限定符, 则可以进行局部匹配

$^同理:

1
.{3}b$  //表示需要匹配的内容必须以b结尾

如下:

1
2
String data1="aaab"; //匹配成功
String data2="aaabg"; //匹配失败

注意: 如果字符^放到中括号中则表示取反

1
[^a] //表示除了字符a外任意字符都行

学到这, 基本上可以实现大部分的正则匹配了

升级

为了方便开发, 正则提供了常用字符的简易写法, 也可以称之为别名

比如:

1
2
3
4
5
[0-9] 可以使用 \d 代替

[a-zA-Z_0-9] 可以使用 \w 代替

[\t\n\x0B\f\r] 可以使用 \s 代替

如果要取反, 那么直接将小写变成大写:

1
2
3
4
5
\D 表示 [^0-9]

\W 表示 [^a-zA-Z_0-9]

\S 表示 [^\t\n\x0B\f\r]

现在 我们再来看几个常用的正则表达式:

1
2
3
4
5
6
//手机号正则匹配
^1[34578][0-9]{9}$


//年月日正则匹配
^\d{4}-\d{2}-\d{2}$

是不是感觉和蔼可亲多了呢

本文为作者原创 转载时请注明出处 谢谢

B站入口

打赏通道

微信公众号二维码如下:

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%