50行代码实现正则引擎

前端之家收集整理的这篇文章主要介绍了50行代码实现正则引擎前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. /*
  2. 50行代码实现正则引擎,参考《代码之美》,可以轻松解决95%的正则问题
  3.  
  4. c 匹配任意的字母c
  5. .(句点) 匹配任意的单个字符
  6. ^ 匹配输入字符串的开头
  7. $ 匹配输入字符串的结尾
  8. * 匹配前一个字符的零个或者多个出现
  9. */
  10.  
  11. main
  12. {
  13. putsl match('.*txt','2343txt')
  14. putsl match('t.t','2343txt')
  15. }
  16.  
  17. bool match(rstr reg,rstr text)
  18. {
  19. if reg.get(0)==`^
  20. return match_here(reg.sub(1),text)
  21. for
  22. if match_here(reg,text)
  23. return true
  24. if text.empty
  25. break
  26. text=text.sub(1)
  27. return false
  28. }
  29.  
  30. bool match_here(rstr reg,rstr text)
  31. {
  32. if reg.empty
  33. return true
  34. if reg.get(1)==`*
  35. return match_star(reg.get(0),reg.sub(2),text)
  36. if reg.get(0)==`$&&reg.sub(1).empty
  37. return text.empty
  38. if !text.empty&&(reg.get(0)==`.||reg.get(0)==text.get(0))
  39. return match_here(reg.sub(1),text.sub(1))
  40. return false
  41. }
  42.  
  43. bool match_star(char c,rstr reg,rstr text)
  44. {
  45. for
  46. if match_here(reg,text)
  47. return true
  48. ifn !text.empty&&(text.get(0)==c||c==`.)
  49. break
  50. text=text.sub(1)
  51. return false
  52. }

猜你在找的正则表达式相关文章