当前位置:首页>正文

C语言正则表达式 C 中正则表达式怎么用

2023-04-20 13:26:02 互联网 未知

C语言正则表达式

现在很多种语言都支持正则表达式,据说有个老外的书不错,精通正则表达式,哎,可惜,我们这小地方买本书比较难,C语言当然支持,许多主流语言都支持,正则表达式可以很大的提升效率,一段小代码就能实现长篇大论的程序,很精彩

C 中正则表达式怎么用

正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,通常简写为regex、regexp、RE、regexps、regexes、regexen。

正则表达式是一种文本模式。正则表达式是强大、便捷、高效的文本处理工具。正则表达式本身,加上如同一门袖珍编程语言的通用模式表示法(general pattern notation),赋予使用者描述和分析文本的能力。配合上特定工具提供的额外支持,正则表达式能够添加、删除、分离、叠加、插入和修整各种类型的文本和数据。

完整的正则表达式由两种字符构成:特殊字符(special characters)称为”元字符”(meta characters),其它为”文字”(literal),或者是普通文本字符(normal text characters,如字母、数字、汉字、下划线)。正则表达式的元字符提供了更强大的描述能力。

和文本编辑器一样,绝大多数高级编程语言均支持正则表达式,如Perl、Java、Python、C/C ,这些语言都有各自的正则表达式包。

一个正则表达式仅仅为一个字符串,它没有长度限制。“子表达式”指的是整个正则表达式中的一部分,通常是括号内的表达式,或者是由”|”分割的多选分支。

默认情况下,表达式中的字母是要区分大小写的。

常用的元字符:

1. “.”: 匹配除" "之外的任何单个字符,若要匹配包括" "在内的任意字符,需使用诸如"[sS]"之类的模式;

2. “^”:匹配输入字符串的开始位置,不匹配任何字符,要匹配”^”字符本身,需使用”^”;

3. “$”:匹配输入字符串结尾的位置,不匹配任何字符,要匹配”$”字符本身,需使用”$”;

4. “*”: 零次或多次匹配前面的字符或子表达式,”*”等效于”{0,}”,如”^*b”可以匹配”b”、”^b”、”^^b”、…;

5. “ ”: 一次或多次匹配前面的字符或子表达式,等效于”{1,}”,如”a b”可以匹配”ab”、”aab”、”aaab”、…;

6. “?”: 零次或一次匹配前面的字符或子表达式,等效于”{0,1}”,如”a[cd]?”可以匹配”a”、”ac”、”ad”; 当此字符紧随任何其他限定符”*”、” ”、”?”、”{n}”、”{n,}”、”{n,m}”之后时,匹配模式是"非贪心的"。"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。如,在字符串"oooo"中,"o ?"只匹配单个"o",而"o "匹配所有"o";

7. “|”:将两个匹配条件进行逻辑"或"(Or)运算,如正则表达式”(him|her)”匹配"itbelongs to him"和"it belongs to her",但是不能匹配"itbelongs to them.";

如何在C语言中使用正则表达式

看到大家讨论这方面的东西,作点贡献聊表各位高手对这个版快的无私奉献 :oops:

如果用户熟悉Linux下的sed、awk、grep或vi,那么对正则表达式这一概念肯定不会陌生。由于它可以极大地简化处理字符串时的复杂
度,因此现在已经在许多Linux实用工具中得到了应用。千万不要以为正则表达式只是Perl、Python、Bash等脚本语言的专利,作为C语言程序
员,用户同样可以在自己的程序中运用正则表达式。

标准的C和C 都不支持正则表达式,但有一些函数库可以辅助C/C 程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库。

编译正则表达式

为了提高效率,在将一个字符串与正则表达式进行比较之前,首先要用regcomp()函数对它进行编译,将其转化为regex_t结构:

int regcomp(regex_t *preg, const char *regex, int cflags)

参数regex是一个字符串,它代表将要被编译的正则表达式;参数preg指向一个声明为regex_t的数据结构,用来保存编译结果;参数cflags决定了正则表达式该如何被处理的细节。

如果函数regcomp()执行成功,并且编译结果被正确填充到preg中后,函数将返回0,任何其它的返回结果都代表有某种错误产生。

匹配正则表达式

一旦用regcomp()函数成功地编译了正则表达式,接下来就可以调用regexec()函数完成模式匹配:

int regexec(const regex_t *preg, const char *string, size_t nmatch,regmatch_t pmatch[], int eflags)
typedef struct {
regoff_t rm_so
regoff_t rm_eo
} regmatch_t

参数preg指向编译后的正则表达式,参数string是将要进行匹配的字符串,而参数nmatch和pmatch则用于把匹配结果返回给调用程序,最后一个参数eflags决定了匹配的细节。

在调用函数regexec()进行模式匹配的过程中,可能在字符串string中会有多处与给定的正则表达式相匹配,参数pmatch就是用来保
存这些匹配位置的,而参数nmatch则告诉函数regexec()最多可以把多少个匹配结果填充到pmatch数组中。当regexec()函数成功返
回时,从string pmatch[0].rm_so到string pmatch[0].rm_eo是第一个匹配的字符串,而从
string pmatch[1].rm_so到string pmatch[1].rm_eo,则是第二个匹配的字符串,依此类推。

释放正则表达式

无论什么时候,当不再需要已经编译过的正则表达式时,都应该调用函数regfree()将其释放,以免产生内存泄漏。

c 问题,正则表达式

"([a-zA-Z] ) 1(([uXXXX-uXXXX] )_2"
正规表达式如上,自己去查uXXXX-uXXXX,汉字在unicode中的编码范围

我假设的是,你想前后英文都一样,前后汉字都一样
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。

正则表达式支持库怎么用

缺少扩展支持库,下载并安装正则表达式支持库2.0,然后在菜单栏“工具”---->支持库配置 找到“正则表达式支持库2.0“ 打勾,确定。下载地址: http://dl.dbank.com/c0cuug3ntm安装方法:将放到包内两个文件(RegEx.fne和RegEx.fnr)释放到"E语言安装目录"lib 文件夹中;支持库向下兼容,2.0比1.2的功能要全些!