GUN C正则表达式

最近项目中要处理文本,因此就用了gun的正则表达式,它是posix风格的..我们一般使用的都是perl风格的,所以一开始使用可能会有一些不习惯.详细的区别可以在wiki上看到:

http://en.wikipedia.org/wiki/Regular_expression

头文件是regex.h可以在里面看到他所提供的接口.这里主要是3个函数和一个结构体:

引用

int regcomp (regex_t *compiled, const char *pattern, int cflags)
int regexec (regex_t *compiled, char *string, size_t nmatch, regmatch_t matchptr [], int eflags)
void regfree (regex_t *compiled)
typedef struct {
  regoff_t rm_so;
  regoff_t rm_eo;
} regmatch_t;

regcomp会将参数pattern编译为compiled,也就是讲字符串编译为正则表达式.

而参数cflags可以是下面1种或者几种的组合:

REG_EXTENDED

使用 扩展的 posix  Regular Expressions.

REG_ICASE

忽略大小写

REG_NOSUB

不存储匹配结果,只返回是否匹配成功.

REG_NEWLINE

可以匹配换行.

regexec执行匹配.compiled为刚才编译好的正则表达式,string为将要匹配的字符串,nmatch为后面的结构体数组的长度 (regmatch_t).matchptr为regmatch_t的一个数组(也就是存储着像perl里面的$0,$1这些的位置,也就是).而 eflag参数则可以是下面中的1个或多个.

REG_NOTBOL

会讲^作为一个一般字符来匹配,而不是一行的开始

REG_NOTEOL

会讲$作为一个一般字符来匹配,而不是一行的结束

regfree每次用完之后需要释放这个正则表达式.compiled为需要释放的正则表达式.

regmatch_t 中的rm_so为匹配字符的开始位置,rm_eo为结束位置.

说了这么多,其实使用很简单的:

引用

POSIX Regexp Compilation: Using regcomp to prepare to match.
Flags for POSIX Regexps: Syntax variations for regcomp.
Matching POSIX Regexps: Using regexec to match the compiled pattern that you get from regcomp.
Regexp Subexpressions: Finding which parts of the string were matched.
Subexpression Complications: Find points of which parts were matched.
Regexp Cleanup: Freeing storage; reporting errors.

时间: 2024-09-11 04:08:28

GUN C正则表达式的相关文章

Java基础-14总结正则表达式,Pattern,Mactcher,Math,BigInteger,BigDeximal,System等

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 学正则表达式之前qq号问题: package cn.itcast_01; import java.util.Scanner; /*  * 校验qq号码.  *  1:要求必须是5-15位数字  *  2:0不能开头

linux shell 正则表达式(BREs,EREs,PREs)差异比较

在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容.许多程序设计语言都支持利用正则表达式进行字符串操作.例如,在Perl中就内建了一个功能强大的正则表达式引擎.正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的.正则表达式通常缩写成"regex",单数有regexp.regex,复数有regexps.regexes.regexen.这些

python使用正则表达式分析网页中的图片并进行替换的方法

 这篇文章主要介绍了python使用正则表达式分析网页中的图片并进行替换的方法,涉及Python使用正则表达式的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了python使用正则表达式分析网页中的图片并进行替换的方法.分享给大家供大家参考.具体分析如下: 这段代码分析网页中的所有图片表单<img>,分析后为其前后添加相应的修饰标签,并添加到图片的超级链接. 代码如下: result = value.replace("[ page ]","

JAVA正则表达式4种常用功能

正则 正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: String str="abc efg ABC"; String regEx="a|f"; //表示a或f Pattern p=Pattern.compile(regEx); Matcher m=p.matcher(str); boolean rs=m.find(); 如果str中有regEx,那么rs为true,否则为flase.如果想在查

请问一个正则表达式

问题描述 路过的大侠们,麻烦帮忙支个招(没分了... ):写一个正则表达式:1.字符串不能以空格开头.结尾2.中间不能有字符:<>我写了个正则表达式:/(^[^<>s]$)|(^(?!s)([^<>]+?)([^s])$)/但是,这个表达式有一种情况不能满足,即,以<>结尾,非空格开头,例如:1<对正则表达式不了解,搞了半天没弄出来,麻烦大侠们帮忙弄弄..../////////////////////////////////////////弄好了...

js正则表达式基本知识

 1."."为通配符,表示任何一个字符,例如:"a.c"可以匹配"anc"."abc"."acc": 2."[]",在[]内可以指定要求匹配的字符,例如:"a[nbc]c"可以匹配"anc"."abc"."acc" :但不可以匹配"ancc",a到z可以写成[a-z],0到9可以写成[0-

关于经纬度正则表达式

问题描述 关于经纬度正则表达式 经纬度正则验证表达式 例如:经度120.000000纬度80.000000 经度范围-180.000000-180.000000 纬度:-90.000000-90.0000000 function checkLongitude(){ var longitude = $('#longitude').val(); if(longitude==null||longitude==''){ $('#longitudeMsg').show(); $('#longitudeMs

求助,正则表达式关于扩展名

问题描述 求助,正则表达式关于扩展名 我想检验后缀名为doc;ppt;exe可以输入一个或多个扩展名.多个用";"号隔开.就像我上面写的那样.该怎么写呢? 解决方案 ^[a-zd]+(;[a-zd]+)*$ 解决方案二: 提取扩展名的正则表达式求助正则表达式正则表达式

IOS中用正则表达式判断输入的内容为8-16位且同时包含数字和字母

今天在项目中需要用到判断用户输入的用户名长度为8-16位且同时包含数字和字母,在网上搜了一下正则表达式的用法,然后参考这篇blog,完美解答了问题.记录一下: 密码有如下要求:由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间. 如何分析需求?拆分!这就是软件设计的一般思路了.于是乎,拆分需求如下: 1,不能全部是数字 2,不能全部是字母 3,必须是数字或字母 只要能同时满足上面3个要求就可以了,写出来如下: 1 ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-