grep正则执行模式粗探
来源:互联网 发布:mac 移动桌面图标 编辑:程序博客网 时间:2024/05/10 11:44
今天群里讨论grep正则时,用到了-P选项
查了下man
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression.
然后对grep的正则执行模式起了点兴趣,继续查看了grep的正则执行过程
还是从main函数开始,跟踪grep的函数调用过程
1:函数调用路径
在grep.c的main函数里,开始时,对参数(相当多)进行了分析(略)
然后调用正则编译函数
然后分别对每个文件,调用了grepfile函数,因此grep支持对多个文件进行操作(包括标准输入)
grepfile对文件类型进行分析,然后调用grep函数
grep函数循环读取(调用fillbuf)文件匹配(调用grepbuf)
grepbuf里,有个match_offset指针,用于指针从左到右的偏移匹配
可以看出grepbuf调用了execute函数指针
execute即是执行正则的函数
2:正则模式设定
execute函数采用指针的形式,是因为grep彩用了多种正则执行模式,用指针方便调用不同模式的正则匹配函数
execute函数指针在install_matcher函数里赋值
这里install_matcher就是在main里分析不同参数是调用的,以指定采用哪种正则“matcher匹配器”?。
通过不同参数指定,并通过setmatcher函数指定matcher值
默认的matcher值是grep:
3:正则函数
正则在处理步骤上,大致可分成编译和执行二个步骤:编译正则表达式,执行正则表达式
上边提到的函数指针
在install_matcher里,设定了正则compile(编辑器?)与正则execute(执行器)
matchers数组,结构数组在search.c文件里指定
默认为Gcompile和EGexecute
相关函数定义:
这边就是调用不同正则表达式编译和解析函数了
以grep默认的Gcompilte和EGexecute为例
Gcompilte事实上调用了dfa.c、dfa.h文件里的正则编译函数dfacomp
而EGexecute则是调用了正则查询函数re_match,re_search
这二个函数在标准库定义/usr/include/regex.h
而对于perl正则模式Pcompile,Pexecute则是调用了perl正则处理函数
这二个函数需要perl正则库(pcre.h)支持
未了,对于正则具体的编译和执行,待以后有空继续研究
- grep正则执行模式粗探
- Grep模式匹配的正则表达式
- grep正则
- grep 正则
- grep 正则
- grep 正则表达式
- 正则表达式之grep
- grep 与正则表达式
- UNIX:grep正则表达式
- 【转】grep正则表达式
- 正则表达式之grep
- 正则表达式在grep
- Grep,正则表达式
- grep 与正则表达式
- 正则表达式之grep
- grep正则表达式
- 正则表达式之grep
- grep 与正则表达式
- 接口、Abstract类
- mkimage用法
- 准备推出OK6410团购活动,学android,想省钱,追求高性能的GG、MM请进
- UML 基础: 统一建模语言简介
- 关于to_char函数
- grep正则执行模式粗探
- windows & ubuntu 桌面登录
- Iphone開發寫文件
- 电驴日语资料下载总汇
- 关于to_char函数(重复)
- 九个PHP中很有用的功能
- memset ,memcpy 和strcpy 的根本区别
- js自定义对象.属性
- 移动到gridview行上时,背景颜色发生改变(代码)