微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

开源项目之TOK REEC C语言正则表达式

REEC是一个精简,高效的C语言正则表达式引擎,它使得C语言开发中支持正则表达式,目前已经进化到了1.2.0版本,可以说无论从功能上,还是效率都到达了很好的应用水平,该引擎除支持常用的正则标准之外,还有一些原创的特性,例如正则式的分组、模式敏感等级等等,使得正则表达式更加灵活多变。

项目如图:


效果如图:



主要测试源码如下:

int main(int argc,char** argv) {
	//正则式:<(a-z)^3>、<(a-z)^*>、<(a-z){2,3}>、<(a-z){2,*}>
	//<(a-z)^3>
	//匹配3个字母,出现位置不必连续
	printf("%s\n",TOKRegularExpressionEngineRun("<(a-z)^3>","你好a我们是b突壳c开源,欢迎使用1.0我们的产品。",RS_LEVEL_0));
	//结果 abc

	//匹配3个字母,出现位置必须连续
	printf("%s\n",RS_LEVEL_1));
	//不连续,结果 null

	//<(a-z)^*>
	//匹配所有字母,出现位置不必连续
	printf("%s\n",TOKRegularExpressionEngineRun("<(a-z)^*>",RS_LEVEL_0));
	//结果 abc

	//匹配n个字母,出现位置必须连续
	printf("%s\n",RS_LEVEL_1));
	//结果 a

	//<(a-z){2,3}>
	//匹配至少2个字母,至多3个字母,出现位置不必连续
	printf("%s\n",TOKRegularExpressionEngineRun("<(a-z){2,3}>","你好a我们是b突壳c开源,欢e迎d使f用1.0我们的f产品。",RS_LEVEL_0));
	//结果 abc

	//匹配至少2个字母,至多3个字母,出现位置不必连续
	printf("%s\n","你好a我们是突壳开源,欢迎使用1.0我们的产品。",RS_LEVEL_0));
	//不足2个字母,结果 null

	//匹配至少2个字母,至多3个字母,出现位置不必连续
	printf("%s\n",RS_LEVEL_1));
	//不连续,结果 null

	//<(a-z){2,*}>
	//匹配至少2个小写字母,至多n个小写字母,出现位置不必连续
	printf("%s\n",*}>","你好a我们是b突A壳c开源,欢F迎G使G用1.0我d们e的f产品。",RS_LEVEL_0));
	//结果 abcdef

	//匹配至少2个小写字母,至多n个小写字母,出现位置不必连续
	printf("%s\n","你好A我们是B突A壳C开源,欢F迎G使G用1.0我D们E的F产品。",RS_LEVEL_0));
	//结果 null

	//匹配至少2个字母,至多n个字母,出现位置必须连续
	printf("%s\n",RS_LEVEL_1));
	//结果 null

	//1连续,0不连续
	//以下是匹配大写字母,正则式:<(A-Z)^3>、<(A-Z)^*>、<(A-Z){2,3}>、<(A-Z){2,*}>
	//<(A-Z)^3>
	printf("%s\n",TOKRegularExpressionEngineRun("<(A-Z)^3>","你好a我们是b突A壳c开源,欢B迎C使用1.0我d们e的f产品。",RS_LEVEL_0));
	//结果 ABC

	printf("%s\n",RS_LEVEL_1));
	//结果 null

	//<(A-Z)^*>
	printf("%s\n",TOKRegularExpressionEngineRun("<(A-Z)^*>",RS_LEVEL_1));
	//结果 A

	//<(A-Z){2,3}>
	printf("%s\n",TOKRegularExpressionEngineRun("<(A-Z){2,"你好a我们是b突A壳c开源,欢B迎C使D用1.0我d们e的f产品。","你好a我们是b突A壳c开源,欢迎使用1.0我d们e的f产品。",RS_LEVEL_0));
	//结果 null

	printf("%s\n",RS_LEVEL_1));
	//结果 null

	//<(A-Z){2,*}>
	printf("%s\n","你好a我们是b突A壳c开源,欢B迎C使用1.0我d们e的f产D品。",RS_LEVEL_0));
	//结果 ABCD

	printf("%s\n",RS_LEVEL_1));
	//结果 null

	//以下是匹配大小写字母,正则式:<(a-zA-Z)^3>、<(a-zA-Z)^*>、<(a-zA-Z){2,3}>、<(a-zA-Z){2,*}>
	//<(a-zA-Z)^3>
	printf("%s\n",TOKRegularExpressionEngineRun("<(a-zA-Z)^3>","你好a我们是突A壳c开源,欢B迎C使用1.0我d们e的f产品。",RS_LEVEL_0));
	//结果 aAc

	printf("%s\n",RS_LEVEL_1));
	//结果 null

	//<(a-zA-Z)^*>
	printf("%s\n",TOKRegularExpressionEngineRun("<(a-zA-Z)^*>",RS_LEVEL_0));
	//结果 aAcBCdef

	printf("%s\n",RS_LEVEL_1));
	//结果 a

	//<(a-zA-Z){2,TOKRegularExpressionEngineRun("<(a-zA-Z){2,RS_LEVEL_1));
	//结果 null

	//<(a-zA-Z){2,RS_LEVEL_1));
	//结果 null

	//以下是匹配数字,正则式:<(0-9)^3>、<(0-9)^*>、<(0-9){2,3}>、<(0-9){2,*}>
	//<(0-9)^3>
	printf("%s\n",TOKRegularExpressionEngineRun("<(0-9)^3>","你好我们1是2突壳3开源,欢迎使用1.0我们的产品。",RS_LEVEL_0));
	//结果 123

	printf("%s\n",RS_LEVEL_1));
	//结果 null

	//<(0-9)^*>
	printf("%s\n",TOKRegularExpressionEngineRun("<(0-9)^*>",RS_LEVEL_0));
	//结果 12310

	printf("%s\n",RS_LEVEL_1));
	//结果 1

	//<(0-9){2,TOKRegularExpressionEngineRun("<(0-9){2,"你好我们1是突壳开源,欢迎使用我们的产品。","你好我们12是2突壳3开源,欢迎使用1.0我们的产品。",RS_LEVEL_1));
	//结果 12

	printf("%s\n",RS_LEVEL_1));
	//结果 null

	//<(0-9){2,"你好我们1是2突壳3开源,欢迎使用1.0我们1的2产3品。",RS_LEVEL_0));
	//结果 12310123

	printf("%s\n",RS_LEVEL_1));
	//结果 null

	printf("%s\n","你好我们12345是突壳开源,欢迎使用1.0我们1的2产3品。",RS_LEVEL_1));
	//结果 123

	printf("%s\n","你好我们1是突壳开源,欢迎使用1.0我们1的2产3品。",RS_LEVEL_1));
	//结果 null

	//以下是匹配数字以及小写字母,正则式:<(a-z0-9)^3>、<(a-z0-9)^*>、<(a-z0-9){2,3}>、<(a-z0-9){2,*}>
	//<(a-z0-9)^3>
	printf("%s\n",TOKRegularExpressionEngineRun("<(a-z0-9)^3>","你好我们12a3是突壳开源,欢迎使用1.0我们1的2产3品。",RS_LEVEL_0));
	//结果 12a

	printf("%s\n","你好我们12是a突壳开源,欢迎使用1.0我们1的2产3品。",RS_LEVEL_1));
	//结果 null

	//<(a-z0-9)^*>
	printf("%s\n",TOKRegularExpressionEngineRun("<(a-z0-9)^*>","你好我们12a3是突a壳开d源,欢迎b使f用1.0我c们1的2产3品。",RS_LEVEL_0));
	//结果 12a3adbf10c123

	printf("%s\n","你好我们a3是突a壳开d源,欢迎b使f用1.0我c们1的2产3品。",RS_LEVEL_1));
	//结果 a3

	//<(a-z0-9){2,TOKRegularExpressionEngineRun("<(a-z0-9){2,"你好我们1a是突a壳开d源,欢迎b使f用1.0我c们1的2产3品。",RS_LEVEL_0));
	//结果 1aa

	printf("%s\n",RS_LEVEL_1));
	//结果 1a

	printf("%s\n","你好我们1是a突a壳开d源,欢迎b使f用1.0我c们1的2产3品。",RS_LEVEL_1));
	//结果 null

	//<(a-z0-9){2,"你好我们12A3是突B壳开C源,欢迎D使E用1.0我F们1的2产3品。","你好我们1a3是突B壳开C源,欢迎D使E用1.0我F们1的2产3品。",RS_LEVEL_1));
	//结果 1a3

	printf("%s\n","你好我们12a3是突B壳开C源,欢迎D使E用1.0我F们1的2产3品。",RS_LEVEL_1));
	//结果 12a

	printf("%s\n","你好我们1是a突B壳开C源,欢迎D使E用1.0我F们1的2产3品。",RS_LEVEL_1));
	//结果 null

	//以下是匹配数字以及大写字母,正则式:<(A-Z0-9)^3>、<(A-Z0-9)^*>、<(A-Z0-9){2,3}>、<(A-Z0-9){2,*}>
	//<(A-Z0-9)^3>
	printf("%s\n",TOKRegularExpressionEngineRun("<(A-Z0-9)^3>",RS_LEVEL_0));
	//结果 12A

	printf("%s\n","你好我们1A是突B壳开C源,欢迎D使E用1.0我F们1的2产3品。",RS_LEVEL_1));
	//结果 null

	//<(A-Z0-9)^*>
	printf("%s\n",TOKRegularExpressionEngineRun("<(A-Z0-9)^*>","你好我们1a2A3是e突B壳f开C源,欢迎D使E用1.0我F们1的2产3品。",RS_LEVEL_0));
	//结果 12A3BCDE10F123

	printf("%s\n",RS_LEVEL_1));
	//结果 1

	//<(A-Z0-9){2,TOKRegularExpressionEngineRun("<(A-Z0-9){2,"你好我们1a23是e突壳f开源,欢迎使用1.0我F们1的2产3品。","你好我们1A23是e突壳f开源,欢迎使用1.0我F们1的2产3品。",RS_LEVEL_1));
	//结果 1A2

	printf("%s\n","你好我们1a23是e突B壳f开C源,欢迎D使E用1.0我F们1的2产3品。",RS_LEVEL_1));
	//结果 23

	//<(A-Z0-9){2,RS_LEVEL_0));
	//结果 12310F123

	printf("%s\n","你好我们1aA3是e突B壳f开C源,欢迎D使E用1.0我F们1的2产3品。",RS_LEVEL_1));
	//结果 A3

	printf("%s\n","你好我们1aA123是e突B壳f开C源,欢迎D使E用1.0我F们1的2产3品。",RS_LEVEL_1));
	//结果 A12

	printf("%s\n",RS_LEVEL_1));
	//结果 23

	//以下是匹配数字以及大小写字母,正则式:<(a-zA-Z0-9)^3>、<(a-zA-Z0-9)^*>、<(a-zA-Z0-9){2,3}>、<(a-zA-Z0-9){2,*}>
	//<(a-zA-Z0-9)^3>
	printf("%s\n",TOKRegularExpressionEngineRun("<(a-zA-Z0-9)^3>",RS_LEVEL_0));
	//结果 1aA

	printf("%s\n","你好我们1a是e突B壳f开C源,欢迎D使E用1.0我F们1的2产3品。",RS_LEVEL_1));
	//结果 null

	//<(a-zA-Z0-9)^*>
	printf("%s\n",TOKRegularExpressionEngineRun("<(a-zA-Z0-9)^*>",RS_LEVEL_0));
	//结果 1a2A3eBfCDE10F123

	printf("%s\n",RS_LEVEL_1));
	//结果 1a2A3

	//<(a-zA-Z0-9){2,TOKRegularExpressionEngineRun("<(a-zA-Z0-9){2,RS_LEVEL_0));
	//结果 1a2

	printf("%s\n","你好我们是突壳开源,欢迎使用我们的产3品。",RS_LEVEL_1));
	//结果 1a2

	printf("%s\n","你好我们1是e突B壳f开C源,欢迎D使E用1.0我F们1的2产3品。",RS_LEVEL_1));
	//结果 null

	//<(a-zA-Z0-9){2,RS_LEVEL_1));
	//结果 1a2A3

	printf("%s\n",RS_LEVEL_1));
	//结果 null

	//以下是匹配数字以及大小写字母,正则式:<(symbol)^3>、<(symbol)^*>、<(symbol){2,3}>、<(symbol){2,*}>
	//<(突壳开源)^3>
	printf("%s\n",TOKRegularExpressionEngineRun("<(突壳开源)^3>","突壳开源,欢迎使用突壳开源产品,欢迎来到突壳开源,突壳开源致力于基础软件开发与研究,突壳开源。",RS_LEVEL_0));
	//结果 突壳开源突壳开源突壳开源

	printf("%s\n",RS_LEVEL_1));
	//结果 null

	//<(突壳开源)^*>
	printf("%s\n",TOKRegularExpressionEngineRun("<(突壳开源)^*>",RS_LEVEL_0));
	//结果 突壳开源突壳开源突壳开源突壳开源突壳开源

	printf("%s\n",RS_LEVEL_1));
	//结果 突壳开源

	//<(突壳开源){2,TOKRegularExpressionEngineRun("<(突壳开源){2,"突a壳开源,欢迎使用突壳d开源产品,欢迎来到突d壳开源,突壳d开源致力于基础软件开发与研究,突壳d开源。","突壳开源突壳开源突壳开源突壳开源,欢迎使用,欢迎来到,突壳开源致力于基础软件开发与研究。",RS_LEVEL_1));
	//结果 突壳开源突壳开源突壳开源

	printf("%s\n",RS_LEVEL_1));
	//结果 突壳开源突壳开源突壳开源

	//<(突壳开源){2,"欢迎使用突壳开源产品,欢迎来到突壳开源,突壳开源致力于基础软件开发与研究。",RS_LEVEL_1));
	//结果 null

	//以下是匹配任意字符,正则式:<(*)^4>、<(*)^*>、<(*){2,4}>、<(*){2,*}>
	//<(*)^4>
	printf("%s\n",TOKRegularExpressionEngineRun("<(*)^4>",RS_LEVEL_0));
	//结果 突壳

	printf("%s\n","突",RS_LEVEL_1));
	//结果 null

	//<(*)^*>
	printf("%s\n",TOKRegularExpressionEngineRun("<(*)^*>",RS_LEVEL_0));
	//结果 突壳开源,欢迎使用突壳开源产品,欢迎来到突壳开源,突壳开源致力于基础软件开发与研究,突壳开源。

	printf("%s\n","突壳开源",RS_LEVEL_1));
	//结果 突壳开源

	//<(*){2,4}>
	printf("%s\n",TOKRegularExpressionEngineRun("<(*){2,4}>",TOKRegularExpressionEngineRun("<(*){4,6}>",RS_LEVEL_0));
	//结果 null

	//<(*){2,RS_LEVEL_0));
	//结果 null

	//综合测试:
	//<(A-Z)^2><(a-z)^3>
	printf("%s\n",TOKRegularExpressionEngineRun("<(A-Z)^2><(a-z)^3>","突TOKSmart Compiler壳开源,欢迎使用突壳开源产品,欢迎来到突壳开源,突壳开源致力于基础软件开发与研究。",RS_LEVEL_1));
	//结果:KSmar

	//[<(0-9)^5>]
	printf("%s\n",TOKRegularExpressionEngineRun("[<(0-9)^5>]","突壳开源,欢迎使用突壳开源产品,欢9.00迎来到突壳开源,突壳123345开源致力于基础软件开发与研究,突壳开源。",RS_LEVEL_0));
	//结果:90012

	//[<(0-9)^5>]
	printf("%s\n",RS_LEVEL_1));
	//结果:12334

	//<(a-zA-Z)^6>
	printf("%s\n",TOKRegularExpressionEngineRun("<(a-zA-Z)^6>",RS_LEVEL_1));
	//结果:TOKSma

	//<(突壳)^1><(0-9)^*>
	printf("%s\n",TOKRegularExpressionEngineRun("<(突壳)^1><(0-9)^*>","突壳2008开源,欢迎使用突壳开源产品,欢迎来到突壳开源,突壳开源致力于基础软件开发与研究。",RS_LEVEL_1));
	//结果:突壳2008

	//[<(突壳)^1><(0-9){3,6}>][<(0-9){3,6}>]
	printf("%s\n",TOKRegularExpressionEngineRun("[<(突壳)^1><(0-9){3,6}>]",RS_LEVEL_1));
	//结果:2008

	//[<(突壳开源)^1><(你好)^1><(0-9)^*>][<(你好)^1><(0-9)^*>][<(0-9)^*>]
	printf("%s\n",TOKRegularExpressionEngineRun("[<(突壳开源)^1><(你好)^1><(0-9)^*>][<(你好)^1><(0-9)^*>][<(0-9)^*>]","突壳开源你好2008,欢迎使用突壳开源产品,欢迎来到突壳开源,突壳开源致力于基础软件开发与研究。",RS_LEVEL_1));
	//结果:2008

	//[<(突壳开源)^1>|<(开源突壳)^1><(0-9)^*>][<(突壳)^1>|<(开源)^1><(0-9)^*>][<(0-9)^*>]
	printf("%s\n",TOKRegularExpressionEngineRun("[<(突壳开源)^1>|<(开源突壳)^1><(0-9)^*>][<(突壳)^1>|<(你好)^1><(0-9)^*>][<(0-9)^*>]","突壳好2008,开源突壳2008欢迎使用突壳开源产品,欢迎来到突壳开源,突壳开源致力于基础软件开发与研究。",RS_LEVEL_1));
	//结果:2008

	//<(http://)^1><(www.)^1><(a-z)^*>|<(A-Z)^*>|<(0-9)^*><(.com)^1>|<(.net)^1>|<(.cc)^1>
	printf("%s\n",TOKRegularExpressionEngineRun("<(http://)^1><(www.)^1><(a-z)^*>|<(A-Z)^*>|<(0-9)^*><(.cc)^1>|<(.com)^1>|<(.net)^1>","突壳开源你好2008,欢http://www.gtkings.c迎使用突http://www.tok.cc壳开源产品,欢迎来到突壳开源,突壳开源致力于基础软件开发与研究。",RS_LEVEL_1));
	//结果:http://www.tok.cc

	getchar();
	return 0 ;
}

具体函数代码 就看源文件了!

代码简单实用,学习的目标是成熟!

项目下载

原文地址:https://www.jb51.cc/regex/363031.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐