正则表达式、Pattern和Matcher类
正则表达式
正则表达式也就是用特殊符号来表达的式子,我们可以用这个表达式来匹配字符串,如:判断我们输入的密码是否正确符合长度不小于6,不大于15之类的规则。正则表达式的常用组成规则
这些规则字符java.util.regex Pattern类中| 字符 | x 字符 x 举例:'a'表示字符a |
| \\ 反斜线字符 | |
| \n 新行(换行)符 ('\u000A') | |
| \r 回车符 ('\u000D') | |
| 字符类 | [abc] a或b或c其中一个(简单类) |
| [ ^abc ] 任何字符,除了a或b或c其中一个(否定) | |
| [a-zA-Z] a到z或A到Z中的某一个,两头的字母包括在内(范围) | |
| [0-9] 0到9的字符都包括,它们中的某一个 | |
| 预定字符类 | . 字符,用表示 \. |
| \d 数字,它就是[0-9]的另一个表示形式 | |
| \w 单词字符,它就是[a-zA-Z_0-9]的另一个表示形式 | |
| 边界匹配器 | ^ 行的开头 |
| $ 行的结尾 | |
| \b 单词边界,也就是不是单词字符的地方,如:hello world?haha;xixi | |
| 数量词 | X? X,一次或一次也没有 比如""空串 就是没有 |
| X* X,零次或多次 ,大于等于1次都算多次 | |
| X+ X,一次或多次 | |
| X{n} X,恰好 n 次 | |
| X{n,} X,至少 n 次 | |
| X{n,m} X,至少 n 次,但是不超过 m 次 |
代码演示
验证用户名,用户名必须是6-16位之间的字母下划线或者数字。public class Check {
public static void main(String[] args) {
// 正则表达式中的[1-9a-zA-Z]表示开头不为零,只在1到9,a到z,A到Z之间任一个字符
//[0-9a-z_A-Z]{5,14}表示字符为1到9,a到z,A到Z,下划线( _ )之间出现至少 5次,但是不超过14次,因为要判断最后一位元素和第一个元素,因此少了2个元素的判断,也就是说中间元素出现的次数为]{5,14}。
//[0-9a-zA-Z]表示最后一位元素只在0到9,a到z,A到Z之间任一个字符
String str="[1-9a-zA-Z][0-9a-z_A-Z]{5,14}[0-9a-zA-Z]";
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String s=sc.next();
// 字符串与正则表达式匹配,matches()方法用来匹配字符串,匹配成功返回true
boolean matches = s.matches(str);
System.out.println("是否正确:"+matches);
}
}
结果
请输入用户名:
gdhsjkfkduiopsgh
是否正确:true
Pattern和Matcher的概述
我们也可以通过模式器(Pattern)和匹配器(Matcher)来使用正则表达式。//它们的调用顺序为:
//获取模式器
Pattern p = Pattern.compile(正则表达式);
//获取匹配器
Matcher m = p.matcher(匹配的字符串);
//匹配字符串,返回布尔值,匹配成功返回true
boolean b = m.matches();
//找到匹配的字符串,最后这两个必须一起用,找到元素才能返回元素,
//每用一次find,就用一次group,要是你不想返回字符串,也可以不写最后这两个。
m.find();
//返回找到的字符串
String g=m.group();
代码演示
获取下面这个字符串中由三个字符组成的单词da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Find {
public static void main(String[] args) {
// \\b表示单词边界,也就是不是字母的地方,这串字符刚好都是小写字母,
//所以范围在[a-z],因为要找的是三个字母组成的单词,
//因此写上{3}表示刚好[a-z]范围内出现三次字母
String str="\\b[a-z]{3}\\b";
String s="da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
//模拟器把正则表达式给装起来
Pattern cm = Pattern.compile(str);
//匹配器把字符串拿过来匹配
Matcher m = cm.matcher(s);
//匹配成功返回true,这里返回false,因为这个表达式是找三个字母组成的单词,
//而这里的s是一长串字符串,因此不匹配
boolean ms = m.matches();
System.out.println("匹配情况:"+ms);
//循环找符合式子的单词,找到就输出
while( m.find()){
String g = m.group();
System.out.println("三个字符组成的单词有:"+g);
}
}
}
结果
匹配情况:false
三个字符组成的单词有:jia
三个字符组成的单词有:jin
三个字符组成的单词有:yao
三个字符组成的单词有:xia
三个字符组成的单词有:wan
三个字符组成的单词有:gao
本文深入探讨了正则表达式的应用,从基本概念到高级技巧,涵盖了常用的字符、字符类、边界匹配器和数量词等规则。通过实例演示了如何使用正则表达式进行字符串匹配,包括验证用户名和查找特定模式的单词。
668

被折叠的 条评论
为什么被折叠?



