正则表达式的具体应用
在软件构造实验三中,有一个读取航班信息文件以构成一个航班计划项的集合,在这里,由于要读取一系列格式固定的文件,并且对不合要求的文件进行甄别,这里就需要我们用到正则表达式,用正则表达式来匹配文件内容。在这里,我就想简单介绍一下最简单的正则表达式的使用方法
编写匹配式
用来匹配自己所读取的内容的字符串一般用regex来表示
1.在写regex的时候,如果有需要固定匹配的内容,就直接写在字符串内,譬如:
Flight:2020-01-16,AA018
{
DepartureAirport:Hongkong
ArrivalAirport:Shenyang
DepatureTime:2020-01-16 22:40
ArrivalTime:2020-01-17 03:51
Plane:B6967
{
Type:A340
Seats:332
Age:23.7
}
}
以上是一组标准的航班信息,当我们要匹配第一行的内容时,显然,前面的“Flight:”是每一组航班信息都相同的内容,因此,在我们自己写regex的时候,就直接将“Flight:”放在regex中即可。
2. 遇到需要匹配一定范围内的数字或字母等时,用[]来表示
仍以上面文件的第一行为例,在读取年份的时候,我们需要匹配的是四位0-9的阿拉伯数字,在这里,我们就用中括号[]来表示范围,这里就要用[0-9]来表示阿拉伯数字,相似地,需要小写字母时,就用[a-z],大写字母就用[A-Z],如果需要组合,就直接在中括号内将这些全部写上即可。注意:单个中括号内的所有内容只会进行一次匹配,例如[ab]只能匹配a或b,但是不能匹配ab,如果需要匹配多位,请见第三点内容
3.我们用大括号{}来代表我们需要匹配的位数,用下面这个表格做一个简单的概括:
格式 | 具体含义 |
---|---|
{N} | 恰好匹配N次,不多不少 |
{N,} | 至少匹配N次 |
{,N} | 至多匹配N次 |
{M,N} | 匹配次数必须要在M-N之间 |
+ | 匹配次数必须一次或多次即可 |
4.用“|”来表示“或”
在匹配具体月日的时候,会出现一个问题,即月份最多只有12,因此如果直接用[0-9]{2}就会出现类似“99”这样的不合法月份出现,这里我们就需要用“|”来表达或的功能,月份就可以表示为(0[1-9]{1}|1[12]{1}),这里的小括号是在写具体很长的式子的时候加上用来方便他人阅读的,并没有什么实际意义
5.转义字符“\”
这个用来将特殊字符转化为普通字符,譬如中括号[],在正常情况下是直接用来表示匹配内容的,但是有些文本需要我们直接匹配这个中括号的内容,那就需要在前面加上一个反斜杠\来表达我就需要匹配一个中括号的需求
匹配函数
假设str是自己读取的需要匹配的内容,regex是自己编写的正则表达式,则可写为
boolean flag = str.match(regex);
如果flag为true则匹配成功,如果不是则说明匹配失败
结语
以上是正则表达式的最简单的用法,在本次试验中已经足够使用,但是正则表达式实际上还有很多复杂的内容,这里限于时间原因不再多写,如果之后仍有空闲,将会补充更多的正则表达式的知识