Lex与Yacc学习(五)之正则表达式篇
正则表达式语法
lex模式是由编辑程序和实用程序使用的正则表达式的扩展版本。正则表达式由常规字符(代表它们本身)和元字符(在一种模式中具有特殊含义)组成。
元字符
.
. 匹配除了换行符 \n 之外的任意单个字符
[]
[] 匹配括号中字符的任意一个。用“-”(短划线)指示字符的范围,例如[0-9]指10个数字中的任意一个。如果开括号之后的第一个字符是短划线或者闭括号,那么它就不能被解释为元字符。如果第一个字符是抑扬字符“ ^ ”,那么它的含义就变为匹配括号内字符以外的任意字符。除了以“ \ ”开始的C转义序列被识别以外,其他的元字符在方括号中没有特殊含义。
*
* 匹配前面正则表达式的零次或者多次出现。
+
+ 匹配前面正则表达式的一次或者多次出现。
?
? 匹配前面正则表达式的零次或者一次出现。例如: -?[0-9]+ 指具有可选的前导或者一元减号的数字
{}
{} 意味着根据括号内部的不同而不同。单个数字{n}意味着前面的模式重复n次。例如: [A-Z]{3} 表示任意3个大写字母。
如果大括号包含的由逗号分开的两个数字{n,m},那么它们是前面模式重复的最小数和最大数。例如:A{1,3}表示字母A出现1次到3次。
如果第二个数字丢失就意味着无穷大,所以{1,}意味着 + ; {0,}意味着 * 。
如果大括号包含一个名字,它指示用那个名字来替换。
\
\ 转义符号,如果后面的字符是小写字母,那么它就是C转义序列。 例如制表位:\t
一些实现允许采用如“\123” 和 “\x3f” 这种形式的八进制和十六进制字符。
否则,“\” 引用后面的字符,所以 \* 匹配一个 * 号。
()
() 将一系列正则表达式归组。 * + {} 中的每一个都直接作用于它左侧的表达式,而且 | 通常同时影响左侧和右侧的内容。圆括号可以改变这种情况,
例如:(ab|cd)?ef 匹配 abef 或者 cdef 或者只是 ef
|
| 匹配前面的或者随后的表达式。
“...”
“...” 逐字匹配引号内的每个字符。不同于“\”的元字符会失去它的含义。
例如:“/*” 匹配两个字符 /*
/
/ 只有当有后面的表达式跟随时才匹配前面的表达式。
例如: 0/1 匹配字符串01中的0 但是不匹配字符串0或者02中的任何字符。
每个模式只允许有一个/ ,并且模式不能同时包含 / 和 $
^
^ 作为正则表达式的第一个字符,它匹配行的开始,它还在方括号中用于否定。
$
$ 作为正则表达式的最后一个字符,它匹配行的结束
<>
<> 位于模式开头的尖括号内的一个或者一列名字,使那个模式只应用于指定的起始状态。
《EOF》
《EOF》 只用于flex中,这个特殊模式匹配文件的结尾。
Lex与Yacc学习(五)之正则表达式篇的更多相关文章
- Lex与Yacc学习(一)之环境配置篇
Abstract 在开发程序的过程中经常会遇到文本解析的问题,例如:解析 C 语言源程序,编写 脚本引擎等等,解决这种文本解析的方法有很多,一种方法就是自己手动用 C 或者 C++直接编写解析程序,这 ...
- Lex与Yacc学习(十)之Yacc库
Yacc库 每个实现都需要有用的例程库,在UNIX系统中,可以通过cc命令行尾端给出-ly标志(或通过其他系统下的等价物)来包含库. 库的内容在不同的实现之间是不同的,但总是包括main()和yyer ...
- Lex与Yacc学习(九)之Yacc语法
Yacc语法 本文讨论yacc语法的格式并描述可用的各种特征和选项 yacc语法结构 yacc语法包括三部分:定义段.规则段和用户子例程段 ...定义段... %% ...规则段... %% ...用 ...
- Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行
词法分析程序ch3-01.l %{ #include "ch3-01.tab.h" extern int yylval; %} %% [0-9]+ { yylval = atoi( ...
- Lex与Yacc学习(四)之Lex规范
Lex规范的结构 lex程序由三部分组成:定义段.规则段和用户子例程序段 ...定义段... %% ...规则段... %% ...用户子例程序段... 这些部分由以两个百分号组成的行分隔开.尽管某一 ...
- Lex与Yacc学习(三)之符号表
符号表 列举单词表的方式虽然简单但是不全面,如果在词法分析程序运行时可以构建一个单词表,那么就可以在添加新的单词时不用修改词法分析程序. 下面示例便利用符号表实现,即在词法分析程序运行时从输入文件中读 ...
- Lex与Yacc学习(二)之第一个Lex程序
用lex识别单词 构建一个识别不同类型英语单词的简单程序.先识别词性(名词,动词等),然后再扩展到处理符合简单英语语法的多个单词的句子. 先列出要识别的一组动词: is am are w ...
- Lex与Yacc学习
http://www.cnblogs.com/shine-yr/p/5214976.html
- Lex与Yacc学习(八)之变量和有类型的标记(扩展计算器)
变量和有类型的标记 下一步扩展计算器来处理具有单个字母名字的变量,因为只有26个字母 (目前只关心小写字母),所以我们能在26个条目的数组(称它为vbltable)中存储变量. 为了使得计算器更加有用 ...
随机推荐
- 洛谷1072(gcd的运用)
已知正整数a0,a1,b0,b1,设某未知正整数x满足: 1. x 和 a0 的最大公约数是 a1: 2. x 和 b0 的最小公倍数是b1. Hankson 的“逆问题”就是求出满足条件的正整数 ...
- 546 Remove Boxes 移除盒子
给定一些不同颜色的盒子,以不同的正整数表示.消去连续相同颜色的盒子,直到全部消除完毕为止.每一次消去可以得到k * k分(k为消去盒子的个数, k >= 1).计算可以得到的最大得分.注意:盒 ...
- 剑指offer部分编程题
一 斐波那契数列 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 问题分析: 可以肯定的是这一题通过递归的方式是肯定能做出来,但是这样会有 ...
- CSS修改Autocomplete样式
举个场景:在用户登录成功的时候,浏览器有时候会咨询你是否记住密码,当你记住密码下次登录的时候,标签会自动填充,但是这样会造成样式不统一,解决办法如下: input:-webkit-autofill, ...
- LaTeX入门简介
原创链接 http://blog.csdn.net/perfumekristy/article/details/8515272 1.LaTeX软件的安装和使用 方法A(自助):在MikTeX的官网下载 ...
- 【Android】SlidingMenu属性详解
SlidingMenu 常用属性介绍: menu.setMode(SlidingMenu.LEFT);//设置左滑菜单menu.setTouchModeAbove(SlidingMenu.TOUCHM ...
- Linux中yum、rpm、configure使用介绍
安装程序命令介绍 安装包选择策略:能上外网:yum方式.绿色方式->不能上外网:rpm方式.configure方式 1.yum命令yum安装包时,会包所依赖的包也会安装到系统,将源换成163的源 ...
- vue+element ui项目总结点(四)零散细节概念巩固如vue父组件调用子组件的方法、拷贝数据、数组置空问题 等
vue config下面的index.js配置host: '0.0.0.0',共享ip (假设你的电脑启动了这个服务我电脑一样可以启动)-------------------------------- ...
- Openjudge 2.5 6264:走出迷宫
总时间限制: 1000ms 内存限制: 65536kB 描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单. 假设你已经得到了一个n* ...
- 关于父类中的this指针的问题
在处理一个消息推送的问题的时候遇到个小问题,比如A是B的子类,当A生成实例时,会执行父类的构造函数,那么在父类中,this会是什么类型呢? 于是做了个小测试 子类ChildClass: public ...