我正在尝试在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代码中建议一个简单的多项式解决方案吗?