Lab3因而起——对正则表达式的学习(一)
Lab3因而起——对正则表达式的学习(一)
在本次lab3实验中的正则表达式部分,对于从没学过正则表达式的小伙伴来说,可以说是困难重重,而我恰好属于其中之一,课堂上对正则表达式的接触皮毛显然没能满足这次实验对我的要求,不多说,开始学习!
- 一、正则表达式
在java中,字符串操作主要集中于String,StringBuffer和StringTokenizer类,与正则表达式相比较,他们只能提供相当简单的功能。正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能能够以编程的方式构造更多复杂的文本模式,并对输入的字符串进行搜索。一旦找到了匹配模式的部分,就能随心所欲的对他们进行处理。
- 二、一点点的了解
在java中,和其他语言的正则表达式不甚相同,主要是由于jav对反斜线\的处理不同。在java中,\的意思式“我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义”,例如要表示一个数字,那正则表达式应该好似\d。因此要想插入一个普通的反斜线应该是\\。不过换行和制表符之类的只需要用单反斜线就够了。
用+表示“一个或多个之前的表达式”,例如:表达“可能有一个负号,后面隔着一位或多位数字”,即:-?\+
而如果要检查一个字符串是否匹配字符表达式,可以用到函数match,例:“-1234”.matches(“-?\d+”);
而这是后就有疑问了,既然+号可以用来表示“一个或多个之前的表达式”,那么当我像表示一个正数的时候可以怎么样呢?可以用\对+进行转义,从而得到我们需要的表达式中的一个普通字符,例如:(-|\+)?,表达的是“可能以一个加号或者减号开头”,在这里面,|的意思是或者,即同时只可能出现或关系的其中之一,而括号有着将表达式分组的效果。
- 三、常用的正则表达式
字符
\t 横向制表符
\n 换行符
\f 换页
\e 转义
\r 回车
字符类
. 任意字符
[abc] 即a|b|c
[^abc] 除了a\b\c以外的其它字符
[a-zA-z] 从a到z或从A到Z的任何字符
[abc[ijk]] a|b|c|i|j|k
\s 空白符(即字符里的五类)
\S [^\s]
\d [0-9]
\D [^\d]
\w [a-zA-Z0-9]
\W [^\w]
对于字符类的记忆也较为轻松,只需要明白[]里的作用以及几个\符号的作用即可,且大写字母总是小写字母的非的含义。
逻辑操作符
XY Y跟着X
X|Y X或Y
(X) 捕获组(在lab3应用时会讲解)
量词:
贪婪型:量词总是贪婪的,贪婪表达式会为所有可能的模式发现更多的匹配。假定模式仅能匹配第一个可能的字符组,如果他是贪婪的,他会继续往下匹配。
勉强型:用问号来指定,这个量词匹配满足模式所需的最少字符数。
占有型:这是只有java中才有的。当正则表达式被应用于字符串时,它会产生相当多的状态,以便在匹配失败时回溯。而“占有”量词不保存这些中间状态,因此它可以防止回溯,常常用于防止正则表达式失控,因此可以使正则表达式执行起来更有效。
贪婪型 勉强型 占有型 匹配方式
X? X?? X?+ 一个或零个X
X* X*? X*+ 零个或多个X
X+ X+? X++ 一个或多个X
X{n} X{n}? X{n}+ n次X
X{n,} X{n,}? X{n,}+ 至少n次X
X{n,m} X{n,m}? X{n,m}+ n-m次X
- 四、lab3中的实战
首先给出一个正则表达式选哟匹配的样本实例:
对于一系列的数据输入,从初学来讲,一行一行的首先分析
1)Flight:2020-01-16,AA018
对于Flight:由于这个部分没有可变性,直接用“Flight:”进行匹配即可
对于日期“xxxx-xx-xx”应采用上面所学到的正则表达式的方式进行设计
首先x在第一个“-”之前出现了4次,即“[0-9]{4}”同理得“xxxx-xx-xx”匹配模式应该是([0-9]{4})-((0[0-9])|(1[0-2]))-((3[0-1])|([1-2][0-9])|(0[1-9]))
对于后来的航班号应该用两个大写字母和数字表示,根据大多数据的观察,最终设计为([A-Z]{2}[0-9]{2}[0-9]?[0-9]?)
将他们合起来为:
Flight:(([0-9]{4})-((0[1-9])|(1[0-2]))-((3[0-1])|([1-2][0-9])|(0[1-9]))),([A-Z]{2}[0-9]{2}[0-9]?[0-9]?)
2)有关‘{’
根据上述所学,需要\进行转义,所以是’\{‘;
3)DepartureAirport:Hongkong、ArrivalAirport:Shenyang
由于DepartureAirport:与ArrivalAirport:固定,故主要设计后面的地点即([A-Z][a-z])
最后整合为DepartureAirport:([A-Z][a-z]) ArrivalAirport:([A-Z][a-z]*)
4)DepatureTime:2020-01-16 22:40、ArrivalTime:2020-01-17 03:51
有了上面的设计经验,得知,这里主要设计的是时间 “xx-xx”
根据正则表达设计为:((2[0-4]|([0-1][0-9])):[0-5][0-9]))
合并得:
DepatureTime:(([0-9]{4})-((0[1-9])|(1[0-2]))-((3[0-1])|([1-2][0-9])|(0[1-9])) ((2[0-4]|([0-1][0-9])):[0-5][0-9]))
ArrivalTime:(([0-9]{4})-((0[1-9])|(1[0-2]))-((3[0-1])|([1-2][0-9])|(0[1-9])) ((2[0-4]|([0-1][0-9])):[0-5][0-9]))
5)Plane:B6967\Type:A340\Seats:332\Age:23.7
以Plane设计为例:Plane:((B|N)[0-9]{4})\n\{\nType:([a-z]|([A-Z])([0-9]+))
6)有关符号 ‘}’
与符号‘{’设计相同,’\}‘。
Lab3因而起——对正则表达式的学习(一)相关推荐
- Lab3因而起——对正则表达式的学习(二)
Lab3因而起--对正则表达式的学习(二) 一.Pattern和Matcher 一般来讲,比起String类,正则表达式的功能更为强大.对于正则表达式,可以通过java自带的包java.util.re ...
- 正则不能输入特殊字符_正则表达式语法学习和在线练习
标题: 正则表达式语法学习和在线练习作者: 梦幻之心星 sky-seeker@qq.com标签: [#正则表达式,#语法,#学习,#练习]目录: [语法]日期: 2021-01-26 背景说明 正则表 ...
- JavaScript正则表达式的学习
JavaScript正则表达式的学习 1. 正则表达式概述 1.1 什么是正则表达式 正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式.在 JavaScrip ...
- 常用正则表达式及学习
正则表达式教程 学习地址:https://www.runoob.com/regexp/regexp-tutorial.html 测试地址:https://tool.oschina.net/regex/ ...
- 正则表达式从零开始学习系列(一)
正则表达式学习 -- 基本概念介绍 正则表达式,又称规则表达式.(英语:RegularExpression,在代码中常简写为regex.regexp或RE),计算机 科学的一个概念.正则表通常 ...
- Javascript正则表达式完全学习手册
正则表达式看起来很吓人,不容易让人亲近,但它的确很好用,可以很大程度上提高你的开发效率.本文从零开始介绍了应如何学习正则表达式.文中范例主要为JavaScript. 正则表达式可以很恐怖,真得很恐怖. ...
- python中re_Python中re(正则表达式)模块学习
今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...
- python中re模块_Python中re(正则表达式)模块学习
今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...
- JAVA -- 正则表达式高级学习技巧
什么是RE? 想必各位大大在做文件查找的时侯都有使用过万用字符"*",比如说想查找在Windows目录下所有的Word文件时,你可能就会用"*.doc"这样的方 ...
最新文章
- 苹果电脑右键怎么按_天正CAD右键菜单怎么改为CAD默认右键菜单?
- 并发基础(十) 线程局部副本ThreadLocal之正解
- Fully Convolutional Networks for Semantic Segmentation (FCN)论文翻译和理解
- sparkstreaming(2)——updatestatebykey
- ubuntu安装LDAP
- matlab基于ssd的角点匹配_基于关键点的目标检测
- CF570D-Tree Requests【长链剖分】
- 583. 两个字符串的删除操作
- Java 重写与重载
- mysql8双机热备高可用配置
- AQS功能及源码详解
- 【算法】剑指 Offer 45. 把数组排成最小的数 【重刷】
- 使用Eclipse-Maven-git做Java开发(9)--eclipse新建maven结构工程
- 【论文阅读】xgboost
- linux驱动加载 动态加载 静态加载 自动加载
- 去了一趟字节跳动,被怼了!
- 税收学考试可以带计算机吗,注册税务师考试题型是不是都是选择题?能不能带计算器?...
- 如何使用Arduino 舵机SG90
- Visual Studio 2015官方汇总包括下载和视频
- PHP获取自然周始末时间