重用正则表达式

有些时候我们需要重用一些经常被使用的正则表达式,不仅是为了使代码更为简洁,同时也是为了省去重复的解析过程。在 kiot-lexer 中,我们可以以下面的方式实现:

import org.kiot.automaton.RegExp

val capitalizedWord = "[A-Z]\\w+".regexp()
val word = "\\w+".regexp()
val number = "\\d+".regexp()
val sentence = (RegExp + capitalizedWord + "( (" + word + "|" + number + "))+").build()

sentence.match("We can deal with numbers like 1926") // true
sentence.match("not capitalized") // false

我们使用 RegExp 来代表一个正则表达式序列的开始,然后我们对这个正则表达式序列调用 build 方法来得到解析的结果。在上面的代码中,capitalizedWordwordnumber 都是 NFA 而不是字符串,所以这里并不存在重复解析的过程。

Last updated

Was this helpful?