字符集合
普通
[a-z]
表示a到z中的某一个字符。
补集
[^abc]
除了a,b,c之外的任意一个字符。
并集
[0-3[4-5]]
表示0,1,2,3,4,5
交集
[0-4&&[4-8]]
表示4
预定义的特殊字符
需要注意的是,在使用时,我们应该用\
转义。
Pattern p = Pattern.complie("\\s")
才能匹配到一个空白字符。
捕获组
使用括号,我们可以捕获组然后进行处理。
例子
在实验三中,我们需要按语法读入数据。
我们使用到的正则有(略去未匹配的情况):
Pattern split = Pattern.compile("Employee\\{(.+)\\}Period\\{(.+)\\}Roster\\{(.+)\\}");
String employees = m.group(1);
String period = m.group(2);
String roster = m.group(3);
这里我们利用Employ
,Period
,Roster
等特殊字符串,将字符串分为了三组。
这里我们着重观察对于Employ
字符串的处理情况。
Pattern patternEm = Pattern.compile("([A-Za-z]+)\\{([A-Za-z| ]+),([0-9]{3}-[0-9]{4}-[0-9]{4})\\}");
Matcher matcherEm = patternEm.matcher(employees);
while (matcherEm.find()) {
if (matcherEm.groupCount() == 3) {
String name = matcherEm.group(1);
String position = matcherEm.group(2);
String phoneNum = matcherEm.group(3);
dutySet.addEmployee(name, position, phoneNum);
}
}
这里我们首先匹配员工姓名[A-Za-z]+
,大小写字母。
然后是职位[A-Za-z| ]+
,大小写字母,空格。
然后是,
然后是电话号码[0-9]{3}-[0-9]{4}-[0-9]{4}
。
利用while和find,
我们循环匹配,并获取了相应的字符串。
工具
通过网站https://regex101.com/
我们能够快速地从正则表达式得出相匹配的字符串,并可以快速生成对应示例代码。
参考
[1] https://docs.oracle.com/javase/tutorial/essential/regex/index.html
[2] https://regex101.com/