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因而起——对正则表达式的学习(一)相关推荐

  1. Lab3因而起——对正则表达式的学习(二)

    Lab3因而起--对正则表达式的学习(二) 一.Pattern和Matcher 一般来讲,比起String类,正则表达式的功能更为强大.对于正则表达式,可以通过java自带的包java.util.re ...

  2. 正则不能输入特殊字符_正则表达式语法学习和在线练习

    标题: 正则表达式语法学习和在线练习作者: 梦幻之心星 sky-seeker@qq.com标签: [#正则表达式,#语法,#学习,#练习]目录: [语法]日期: 2021-01-26 背景说明 正则表 ...

  3. JavaScript正则表达式的学习

    JavaScript正则表达式的学习 1. 正则表达式概述 1.1 什么是正则表达式 ​ 正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式.在 JavaScrip ...

  4. 常用正则表达式及学习

    正则表达式教程 学习地址:https://www.runoob.com/regexp/regexp-tutorial.html 测试地址:https://tool.oschina.net/regex/ ...

  5. 正则表达式从零开始学习系列(一)

    正则表达式学习 -- 基本概念介绍     正则表达式,又称规则表达式.(英语:RegularExpression,在代码中常简写为regex.regexp或RE),计算机 科学的一个概念.正则表通常 ...

  6. Javascript正则表达式完全学习手册

    正则表达式看起来很吓人,不容易让人亲近,但它的确很好用,可以很大程度上提高你的开发效率.本文从零开始介绍了应如何学习正则表达式.文中范例主要为JavaScript. 正则表达式可以很恐怖,真得很恐怖. ...

  7. python中re_Python中re(正则表达式)模块学习

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...

  8. python中re模块_Python中re(正则表达式)模块学习

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...

  9. JAVA -- 正则表达式高级学习技巧

    什么是RE? 想必各位大大在做文件查找的时侯都有使用过万用字符"*",比如说想查找在Windows目录下所有的Word文件时,你可能就会用"*.doc"这样的方 ...

最新文章

  1. 苹果电脑右键怎么按_天正CAD右键菜单怎么改为CAD默认右键菜单?
  2. 并发基础(十) 线程局部副本ThreadLocal之正解
  3. Fully Convolutional Networks for Semantic Segmentation (FCN)论文翻译和理解
  4. sparkstreaming(2)——updatestatebykey
  5. ubuntu安装LDAP
  6. matlab基于ssd的角点匹配_基于关键点的目标检测
  7. CF570D-Tree Requests【长链剖分】
  8. 583. 两个字符串的删除操作
  9. Java 重写与重载
  10. mysql8双机热备高可用配置
  11. AQS功能及源码详解
  12. 【算法】剑指 Offer 45. 把数组排成最小的数 【重刷】
  13. 使用Eclipse-Maven-git做Java开发(9)--eclipse新建maven结构工程
  14. 【论文阅读】xgboost
  15. linux驱动加载 动态加载 静态加载 自动加载
  16. 去了一趟字节跳动,被怼了!
  17. 税收学考试可以带计算机吗,注册税务师考试题型是不是都是选择题?能不能带计算器?...
  18. 如何使用Arduino 舵机SG90
  19. Visual Studio 2015官方汇总包括下载和视频
  20. PHP获取自然周始末时间

热门文章

  1. DirectShow摄像头采集
  2. 判断是本地网卡是物理网卡还是虚拟网卡
  3. 【NumPy】NumPy约减的轴的方向
  4. win10只有一个账户删除提示密码错误
  5. Windows 创建相对路径的快捷方式
  6. PHP语言基础(一)
  7. 北风网基础+项目实战打造CS高手(C#系列培训)
  8. (一)目标检测定位算法之SSD检测自己的图片
  9. 如何用数学软件MATLAB表白:让你在5月20日成功脱单
  10. 粒子效果 Particles