概述
某个语句规则的字符串
匹配符号
-
中括号
[ ]
:只有方括号里面 指定的字符 才参与匹配,也只能匹配单个字符任意一次。也可以使用[ - ]的形式代表区间- 表达式:
[c蔡i]
xk 只可以匹配:cxk,蔡xk,ixk 。不可以匹配:菜xk,Cxk 等。 - 表达式:[0
-
9] 代表匹配0到9的所有数字。 [a-
z]代表匹配小写a到z的所有字母。[0 - 9a - zA - Z]代表匹配所有的数字,小写字母,大写字母。 - 表达式:例如:如果要匹配一个数0到9后边还有
-
,如何匹配?表达式:[0 - 9\ -
],就OK啦 - 如果我不想匹配0到9的所有数字怎么办? 此时需要
^
来标记,表达式:[^
0 - 9 ] - 如何编写代码匹配
爱
后面不包含
你
的数据? 表达式:爱 [^
你 ] public boolean matches(String regex)
告诉这个字符串是否匹配给定的正则表达式
- 表达式:
-
英文句点
.
符号: 匹配 单个任意字符 ,它只能出现在方括号外
- 表达式t.o 可以匹配:tno,t#o,teo等等。不可以匹配:tnno,to,Tno,t正o等
- 匹配任意字母之后是ar的字符串,例如:ear,car,parked,barked,表达式:
.
ar
-
可选字符(匹配次数的符号)
符号 | 字符出现次数 | 例子 |
---|---|---|
? | 0 次或者1 次 | 表达式:比如honu? r,指u可以出现也可以不出现,honr或honur |
{n} | 恰好n 次 | 比如匹配下列电话号码如186482656,如何匹配?表达式:\d{9} --------- 比如匹配下列电话号码如010-676448的形式,如何匹配?表达式:\d{3} -\d {6} |
{n,m} | 从n 次或者m 次 | 比如表达式:\d{8,9} ,指可以匹配12435453或者124354535 -------当只想遇到8个数字时候,不在匹配9个数字的时候怎么办呢?表达式\d {8,9}\? ,注意这里的? 表示的是非贪婪模式,尽可能很少的匹配字符-------综合题:以3或者4数字开头,后面7个数字,例如:020-7281333,如何表示?表达式:\d {3,4} - \d {7} |
{n,} | n 次或者n 次以上 | 表达式:\d {0,} 表示0个或者无数个;表达式:\d {1,} 表示1个或者无数个 |
* | 0 次或者多 次 | 相当于{0,} |
+ | 1 次或者多 次 | 相当于{1,},例如匹配以f 开头的数据,如food,faker,f04523…a123,表达式:f.+ |
-
匹配所有的手机号码,1. 必须是
11
位的数字,2. 第一位数字必须以1
开头,第二位数字可以使[3,4,5,6,7,8]
,后面9个数是[0 - 9]
中的任意一个数字,表达式:^
1[
345678]
\d
{
9}
-
匹配网站地址,1. http s : //code.com/ 或者http: //code.com/的形式,2. 不能有
http
和http:jn/code
形式,表达式:http.
*
/$
快捷符号
-
\d
:匹配任意数字,相当于[0 - 9],相反\D
:匹配的是非数字[ ^ 0 - 9] -
\w
:匹配字母,数字,下划线,相当于表达式[0 - 9 a - z _ A - Z],相反\W
:匹配的是非字母,数字,下划线[ ^ 0 - 9 a - z _ A - Z] -
\s
:匹配空白符,比如空格,tab,换行等,例如"鸡你太美\s
”,相反\S
:匹配的是非空格,tab,相当于全部 -
\b
:匹配有边界单词,例如字符串"absmasterjhjs-master-dsgsdg"master",则表达式:\b
master\b
,匹配出的是后面两个master,,,例如匹配1,2,3a456的匹配边界数字的话,表达式:\b \d
\b,只能是1
,2
,3a456
开始和结束
-
^
:指的是一个字符串的开始,例如^
Java,匹配的是Java-sfasafgJava -
$
:指的是一个字符的结束,例如Java$
,匹配的是java-dsgfjavagsd-java
注意:当都加上
^
Java$
,匹配的是Java。这里 前后 没有任何东西就光是Java
分组及其各种形式
-
在正则表达式,除了获取整个匹配,还能够在匹配中选择每一个分组,使用
()
即可。- 例如:鸡你太美:777-233333,如何表示呢? 表达式:
(
\d
{
3}
)
-(
\d
{
6}
)
- 提取标签中的数据:例如:< div >cxk< /div >要匹配,但是提取cxk怎么提取呢?表达式:< div >
(
.
*
?
)
< /div > - 提取年月日:例如:需要匹配2020-1-2,2020-2-2,2020-01-02,2020/01/02,20200318,2020 04 15需要提取2020 1 2,2020 2 2,2020 01 02,2020 01 20,2020 01 01,2020 02 02如何提取呢?
(
\d{
4}
)
[
-/\\s
]
?
(
\d{
1,2}
)
[
-/\\s
]
?
(
\d{
1,2}
)
- 例如:鸡你太美:777-233333,如何表示呢? 表达式:
-
或者条件
(
|
)
- 例如:1.avi,abc.mp4,chapter.wmv,image.jpg,提取所有视频图片文件后缀名,如何提取? 表达式:
(
.mp4|
.avi|
.wmv|
.jpg)
- 例如:1.avi,abc.mp4,chapter.wmv,image.jpg,提取所有视频图片文件后缀名,如何提取? 表达式:
-
非捕获分组
(
?:表达式
)
需要匹配:01-75855,0731-75855,12345-75855,tel:75855,需要提取的是75855,如何提取?表达式 :(
? :
\d
{
2}
|
\d
{
3}
|
\d
{
4}
|
\d
{
5}
|
tel)
[
\ - :]
(
\d
{
5}
)
-
分组的回溯引用
(\n)使()分组重复一次,排列顺序从1开始
- 例如:匹配123< font >提示 < /font > abcd的标签< font >和内部内容怎么实现呢?表达式:<
(
\w+
)
>.*?
</\ 1
> 注意:.*?
是指任意所有字符类型,\1
指的就是(\w+)
- 例如:匹配符合的ab ba这种关系的单词,如何实现呢?表达式:
(\w)
(\w)
\2
\1
- 例如:匹配123< font >提示 < /font > abcd的标签< font >和内部内容怎么实现呢?表达式:<
-
正向
先
行断言(?=表达式)
指在某个位置向右看,表示所在位置右侧必须能匹配表达式
- 例如:我喜欢你,我喜欢,我喜欢我,喜欢,喜欢你,如果说要取出喜欢两个字,要求喜欢后面有你 ,如何实现?表达式:
喜欢(?=你)
,我喜欢你和喜欢你符合条件 - 提取包含大小写字母的字符串,表达式:()
(?= .*?[a-z])
(?= .*?)[A-Z]
.+
- 密码强度验证,条件:1至少一个大写或者小写字母,2至少一个数字,至少8个字符;表达式:
(?= .*?[a-z])
(?= .*?[A-Z])
(?= .*?[0-9])
.{8}
- 例如:我喜欢你,我喜欢,我喜欢我,喜欢,喜欢你,如果说要取出喜欢两个字,要求喜欢后面有你 ,如何实现?表达式:
-
反向
先
行断言(?!表达式)
指保证从左往右不能出现某字符- 例如: 我喜欢你,我喜欢,我喜欢我,喜欢,喜欢你,如果说要取出喜欢两个字,要求喜欢后面没有你 ,如何实现?表达式
喜欢(?!你)
,我喜欢,我喜欢我,喜欢符合条件 - 排除邮箱 @
(?!qq)
- 例如: 我喜欢你,我喜欢,我喜欢我,喜欢,喜欢你,如果说要取出喜欢两个字,要求喜欢后面没有你 ,如何实现?表达式
-
正向
后
行断言(?<=表达式)
指从某个位置向左看,所在位置左侧必须
能匹配表达式
- 例如:如果想取出喜欢两个字,要求喜欢的前面有我,后边有你,怎么实现呢? 表达式:
(?<=我)
喜欢(?=你)
- 例如:匹配王姓同学的名字,需要匹配的王芳,王芳芳,芳芳 王菲,表达式:
(?<=王)
\S+
注意:\S+
的意思是除了空白,tab,换行以外的字符
- 例如:如果想取出喜欢两个字,要求喜欢的前面有我,后边有你,怎么实现呢? 表达式:
-
反向
后
行断言(?<!表达式)
指从某个位置向左看,所在位置左侧不能
匹配表达式
- 例如:如果想取出喜欢两个字,要求喜欢的前面
没
有我,后边没
有你,怎么实现呢? 表达式:(?<!我)
喜欢(?!你)
- 匹配一个美元符号中的数据,注意:匹配$符号要加上转义字符
\
哦,表达式:(?<!\$)
\ $[^ \$]+
\ $(?!\$)
- 例如:如果想取出喜欢两个字,要求喜欢的前面
常用的正则表达式
https://lemon-.blog.csdn.net/article/details/91417485?spm=1001.2014.3001.5506