Scala中的简化正则表达式匹配

时间:2013-10-05 19:47:33

标签: regex scala

我正在尝试在Scala中编写一个简单的正则表达式作为练习。为简单起见,我假设要匹配的字符串是ASCII,正则表达式由ASCII字符和两个元字符组成:仅.*。 (显然,我不使用任何regexp库。)

这是我简单而缓慢(指数)的解决方案。

def doMatch(r: String, s: String): Boolean = {
  if (r.isEmpty) s.isEmpty
  else if (r.length > 1 && r(1) == '*') star(r(0), r.tail.tail, s)
  else if (!s.isEmpty && (r(0) == '.' || r(0) == s(0))) doMatch(r.tail, s.tail)
  else false
}

def star(c: Char, r: String, s: String): Boolean = {
  if (doMatch(r, s)) true
  else if (!s.isEmpty && (c == '.' || c == s(0))) star(c, r, s.tail)
  else false
}

现在我想改进它。你能在~10-15行“纯”Scala代码中建议一个简单的多项式解决方案吗?

0 个答案:

没有答案