1.正则表达式的用处
正则表达式定义了字符串的模式。
正则表达式可以用来搜索、编辑或处理文本。
2.基本语法
3.实例
1.匹配 Game ::= 100|200|400
Pattern temp1 = Pattern.compile("Game\\s?::=\\s?([0-9]*)");\\
讲解\\s?是匹配一个或零个空格,
[0-9]*是匹配[0-9]的闭包-{∅,x,x ²……}, {x|x∈[0-9]}。
()是捕获组
String str = "Game ::= 100";
Matcher Temp1 = temp1.matcher(str);
String GameName = Temp1.group(1);//获得游戏名字
2.匹配 NumOfTracks ::= 跑道数目,4到10之间的整数。
Pattern temp2 = Pattern.compile("NumOfTracks\\s?::=\\s?(4|5|6|7|8|9|10)");//匹配跑道数目
(4|5|6|7|8|9|10)是只匹配字符∈{4,5,6,7,8,9,10}。
String str = "NumOfTracks ::= 8";
Matcher Temp2 = temp2.matcher(str);
int NumOfTrack = Integer.parseInt(Temp2.group(1));
3.匹配 Athlete ::= <姓名,号码,国籍,年龄,本年度最好成绩>
姓名是由大小写字母构成,不含有空格。号码和年龄是正整数。
国籍是三位大写字母,成绩是最多两位整数和必须两位小数构成。
Pattern temp3 = Pattern.compile("Athlete\\s?::=\\s?<([a-zA-Z]+),(\\d+),([A-Z]{3}),(\\d+),(\\d{1,2}.\\d{2})>");
[a-zA-Z]+ 匹配字符x(x∈{a,b,…,z,A,B,…,Z})至少一次。
\\d+ 匹配[0-9]至少一次。
[A-Z]{3} 匹配字符x(x∈{A,B,…,Z})三次。
(\\d{1,2}.\\d{2}),先匹配[0-9]一或两次,再匹配小数点“.”,最后匹配[0-9]两次。
4.匹配 NumberOfElectron ::= 轨道号 1/该轨道上的电子数量; 轨道号 2/该轨道上的电子数量;…
例 NumberOfElectron ::= 1/2;2/6
这个个人感觉是最难的,因为它需要在每个轨道信息分割为";",但是最后结尾不能由";"。这个在学习了形式语言自动机中正则语言就好做了。
首先在轨道信息结束前,每个加入的是 \\d/\\d;,结尾就是**\\d/\\d**。所以先将前面匹配,最后的单独匹配。
Pattern temp3 = Pattern.compile("NumberOfElectron ::= ([0-9]+/[0-9]+;)*([0-9]+/[0-9]+)");