加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

50行代码实现正则引擎

发布时间:2020-12-14 01:45:50 所属栏目:百科 来源:网络整理
导读:/*50行代码实现正则引擎,参考《代码之美》,可以轻松解决95%的正则问题c 匹配任意的字母c .(句点) 匹配任意的单个字符 ^ 匹配输入字符串的开头 $ 匹配输入字符串的结尾 * 匹配前一个字符的零个或者多个出现*/main{putsl match('.*txt','2343txt')putsl m
/*
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 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读