大家好,又见面了,我是你们的朋友全栈君。
什么是正则表达式?
正则表达式的定义:这是一种字符串的语法规则,是一种可以用于模式匹配和替换的规则,主要用于文本和字符串的处理(匹配,查找,替换,判断字符串)。一个正则表达式是由普通的字符(a~z)以及特殊字符(元字符)组成的文字模式,用以描述在查找文字主体时待匹配的一个或多个字符串。下面我们会介绍一些常用的元字符
正则表达式的元字符
元字符的定义:元字符:元字符使得正则表达式具有处理能力,指的是那些在正则表达式中具有特殊意义的专用字符,可以规定其前导字符在目标对象中的出现模式
元字符
在正则表达式中的写法
意义
.
.
任何一个字符
\d
\\d
0-9之间的任意一个数字
\D
\\D
任何一个非数字字符
\s
\\s
空格类字符’\t’,’\n’等等
\S
\\S
非空格类字符
\w
\\w
可用于标识符的字符,不包括美元符
\W
\\W
不能可用于标识符的字符
\p{Lower}
\\p[Lower]
小写字母[a~z]
\p{Upper}
\\p{Upper}
大写字母[A~Z]
\p{ASCII}
\\p{ACSII}
ASCII字符
\p{Alpha}
\\p{Alpha}
字母
\p{digit}
\\p{digit}
数字字符[0~9]
\p{Alnum}
\\p{Alnum}
字母或数字
\p{Punct}
\\p{Punct}
标点符号
\p{graph}
\\p{graph}
可视字符,\p{Alnum},\p{Punct}
\p{Print}
\\p{Print}
可打印字符
\p{Blank}
\\p{Blank}
空格或制表符
\p{Cntrl}
\\p{Cntrl}
控制字符[\x00~\x1F\x7F]
上面的表中,基本上就是一些比较常用的元字符,我们需要注意元字符在正则表达式中的写法,不能直接用元字符来编写我们的正则程序
正则表达式中的方括号[]
元字符可以是放在[]中的任意单个字符(如[a]表示匹配单个小写字符a),也可以是字符序列(如[a-d]表示匹配a-d即a,b,c,d中的任意一个字符,而\w表示任意英文字母、数字及下划线)。例如:regex=”[159]ABC”,那么”1ABC”,”5ABC”,”9ABC”都是与正则表达式regex匹配的字符,方括号的含义如下:
注:方括号内允许嵌套,可以进行交,并,差运算
方括号表达式
含义
[abcde]
匹配a,b,c,d,e中的任意一个字符
[a-h]
匹配a到h之间的任意一个字符
[^fgh]
匹配除f,g,h外的任意一个字符
[a-d[m-p]]
代表a~d,或m~p中的任意一个字符(并)
[a-z&&[def]]
代表d,e或f中的任意一个字符串(交)
[a-z&&[^bc]]
代表a,d,e,f(差)
正则表达式中的限定符
在使用正则表达式时,我们知道元字符一般只能匹配一个位置或一个字符,如果需要某一类型的元字符多次输入,逐个输入,或是要匹配多个字符的时候就相当麻烦,这个时候我们可以使用正则表达式的限定符来重复输入。例如:regex=”hello[246]?”,那么”hello”,”hello2″,”hello4″,”hello6″都是与regex匹配的字符串,下面是一些常见的限定符
带限定符号的模式
含义
X?
X出现0次或1次
X*
X出现0次或多次
X+
X出现1次或多次
X{n}
X出现n次
X{n,}
X至少出现n次
X{n,m}
X至少出现n至m次
XY
X后面跟Y
X|Y
X或Y
然后用法的话相信大家不会陌生吧:
String regex=”自己定义的正则表达式”;
String test=”需要正则的字符串对象”;
boolean isMatch=test.matches(regex);
if(isMatch){
//test为匹配成功的数据
}else{
//test为匹配失败的数据
}
可能有些人会说,我经常用到的正则表达式中有Pattern和Matcher两个类,这两个类是干嘛的呢?
Pattern: 一个Pattern是一个正则表达式经编译后的表现模式。
Matcher: 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。
首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161616.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...