前端之家收集整理的这篇文章主要介绍了
50行代码实现正则引擎,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
- /*
- 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)==`$&®.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
- }