Java通识基础23(正则表达式regular exprssion
)
一种工具,绝大部分好的语言都应该支持正则表达式
正则表达式的理解性定义:
是一个“字符串模板”,可以代表一批字符串
功能表与特性
通配符:
每一个通配符都代表一个字符
.
:代表任意一个字符\d
:代表任意一个数字——digit\D
:代表任意一个非数字\w
:代表任意一个单词字符——word\W
:代表任意一个非单词字符\s
:代表任意一个空白\S
:代表任意一个非空白字符——space范围通配符
[a-d]
:代表a、b、c、d其中的任意一个字符枚举通配符
[adm]
:代表a、d、m之中的任意一个字符范围和枚举共存的通配符
[am4-6]
:代表a、m、4、5、6其中的任意一个字符求否字符
^
[^am4-6]
:代表不是a、m、4、5、6其中的任意一个字符[^a-d]
:代表不是a、b、c、d其中的任意一个字符[^adm]
:代表a、d、m不是之中的任意一个字符
求与字符
&&
[a-g&&[^c-e]]
:代表在a到g范围内又不是c-e的任意字符
出现频率运算符
?
:代表前面的字符出现0-1次a?b
:a只能出现0-1次,比如aab
就不符合条件
*
:前面的字符可以出现0-N次a*b
:a只能出现0-N次,比如aaaaab
、b
\d*5
:以5为结尾出现的任意一串数字
+
:前面的字符可以出现1-N次a+b
:a只能出现1-N次,比如aaaaab
、单独的b
不符合条件
{m,n}
:前面的字符出现m到n次{m,}
:前面的字符出现m到无限次{,n}
:前面的字符出现0到n次{m}
:前面的字符必须出现m次
成组
(abc){1,2}
意义:小括号内是一个固定组合,不可以拆分
思考:((abc)|(123))*
可否match abc1232123
返回true
举例——身份证年份的正则表达式
\\{6}{{19\\d{2}}|{20[0,22]}}
;
Java对正则表达式的定义
引例
public class Demo1 {
public static void main(String[] args) {
System.out.println("233".matches("^\\d+5$"));//双斜杠的目的是用于转义
System.out.println("233432425".matches("^\\d+5$"));
}
}
/*
false
true
*/
程序写入正则表达式的时候需要
`^`作为开头
`$`作为结尾
应用——正则表达式判断用户输入是否合法
import java.util.Scanner;
public class Example {
public static void main(String[] args) {
Scanner ID=new Scanner(System.in);
String you="^1{1,3}0{1,3}2$";
while (ID.hasNextLine())
{
String id=ID.nextLine();
if(id.matches(you)){
System.out.println("vic");
}
else {
System.out.println("Wrong");
}
; }
}
}
/*
102
vic
222
Wrong
*/
Java对正则表达式的支持
String
类
matches(regex)
方法:判断该字符串是否匹配正则表达式(上述例子已经展示)
split(regex)
方法:根据指定分隔符将字符串分隔多段
replaceAll(regex,replacement)
:将regex
替换成replacement
(注意使用转义运算符)