Java中的正则表达式
文章目录
1.基础语法
正则表达式由普通字符和元字符组成。普通字符可以是字母、数字或符号等常见字符,而元字符则具有特殊的含义。例如,“.” 表示任意一个字符,“\d” 表示任意一个数字。
2.元字符
元字符是正则表达式中最重要的部分之一,它用来描述字符的类型和数量。以下是一些常见的元字符:
- “.”:表示任意一个字符
- “\d”:表示任意一个数字
- “\D”:表示除数字以外的任意一个字符
- “\w”:表示任意一个单词字符(即字母、数字、下划线等)
- “\W”:表示除单词字符以外的任意一个字符
- “\s”:表示任意一个空格、制表符、回车符等空白字符
- “\S”:表示除空白字符以外的任意一个字符
- “^”:表示字符串开头
- “$”:表示字符串结尾
- “[]”:表示匹配一个字符集合
- “{}”:表示匹配一个指定数量的元素
- “|”:表示或的关系
3.量词
量词用来表示某个元素出现的次数。以下是几个常见的量词:
- “*”:表示匹配0或多次
- “+”:表示匹配1或多次
- “?”:表示匹配0或1次
- “{n}”:表示匹配n次
- “{n,}”:表示匹配n次或更多次
- “{n,m}”:表示匹配n到m次
4.分组和反向引用
在正则表达式中,可以使用小括号“()”来进行分组,分组后可以使用“\1”、“\2”等形式来进行反向引用。例如,“(ab)\1” 可以匹配 “abab”。
5.正则表达式示例
以下是一些常见的正则表达式示例:
6.Pattern和Matcher
Pattern和Matcher是用来操作正则表达式的两个重要类。Pattern类表示正则表达式对象,而Matcher类则用来对一个字符串进行匹配操作。
在使用正则表达式前,需要将正则表达式编译成Pattern对象。这可以通过Pattern.compile(String regex)方法实现。例如,下面的代码将正则表达式编译成Pattern对象:
String regex = "\\d+";
Pattern pattern = Pattern.compile(regex);
一旦有了Pattern对象,就可以使用它来创建Matcher对象,并使用Matcher对象进行字符串匹配。Matcher类提供了多个方法用来对字符串进行匹配,如matches()、find()、group()等。例如,下面的代码可以用来判断一个字符串是否符合整数格式:
String input = "123";
boolean isMatch = Pattern.matches("\\d+", input);
除了直接匹配字符串外,Matcher类还可以利用正则表达式来查找字符串中符合规则的子串。通过find()和group()方法,可以分别查找下一个匹配的子串和获取匹配的字符串。例如,下面的代码可以查找一个字符串中所有的数字,并打印出来:
String input = "hello 123 world 456";
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
除了查找子串外,Matcher类还可以使用正则表达式来替换字符串中符合规则的内容。通过replaceAll()和replaceFirst()方法,可以分别替换掉所有匹配的内容或者仅替换第一个匹配的内容。例如,下面的代码可以将一个字符串中的所有数字替换为“###”:
String input = "hello 123 world 456";
Pattern pattern = Pattern.compile("\\d+");
String output = pattern.matcher(input).replaceAll("###");
综上所述,Pattern和Matcher类是Java中操作正则表达式的重要工具,它们可以实现对字符串的匹配、搜索和替换等操作。需要注意的是,在使用正则表达式时,还需要注意正则表达式的语法和特性,以确保正确使用它们。
7.代码实例
String regex = "^[a-zA-Z0-9]{6,20}$";
System.out.println(" ");
System.out.println("注意:账号和密码长度为6-20位数字或字母!");
Scanner in = new Scanner(System.in);
System.out.print("请输入新账号:");
String zh = in.nextLine();
while (!zh.matches(regex)) {
System.out.println("注意:账号和密码长度为6-20位数字或字母!");
System.out.print("请重新输入新账号:");
zh = in.nextLine();
}
System.out.print("请输入新密码:");
String mm = in.nextLine();
while (!mm.matches(regex)) {
System.out.println("注意:账号和密码长度为6-20位数字或字母!");
System.out.print("请重新输入新密码:");
mm = in.nextLine();
}
这是一个可以判断并修正密码长度和内容的程序,限制账号和密码长度为6-20位数字或字母。