50行代码实现正则引擎

本文介绍了一个仅由50行代码构成的正则表达式引擎,该引擎能够轻松解决95%的常见正则表达式问题。通过使用基本的正则语法符号,如`c`匹配任意字母,`.`匹配任意单个字符,`^`匹配字符串开始,`$`匹配字符串结束,`*`匹配前一个字符的零次或多次出现,本文提供了一种简洁且强大的正则表达式匹配方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
50行代码实现正则引擎,参考《代码之美》,可以轻松解决95%的正则问题

c 匹配任意的字母c 
.(句点) 匹配任意的单个字符 
^ 匹配输入字符串的开头 
$ 匹配输入字符串的结尾 
* 匹配前一个字符的零个或者多个出现
*/

main
{
	putsl match('.*txt','2343txt')
	putsl match('t.t','2343txt')
}

bool match(rstr reg,rstr text)
{
	if reg.get(0)==`^
		return match_here(reg.sub(1),text)
	for
		if match_here(reg,text)
			return true
		if text.empty
			break
		text=text.sub(1)
	return false
}

bool match_here(rstr reg,rstr text)
{
	if reg.empty
		return true
	if reg.get(1)==`*
		return match_star(reg.get(0),reg.sub(2),text)
	if reg.get(0)==`$&&reg.sub(1).empty
		return text.empty
	if !text.empty&&(reg.get(0)==`.||reg.get(0)==text.get(0))
		return match_here(reg.sub(1),text.sub(1))
	return false
}

bool match_star(char c,rstr reg,rstr text)
{
	for
		if match_here(reg,text)
			return true
		ifn !text.empty&&(text.get(0)==c||c==`.)
			break
		text=text.sub(1)
	return false 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值