重用正则表达式
有些时候我们需要重用一些经常被使用的正则表达式,不仅是为了使代码更为简洁,同时也是为了省去重复的解析过程。在 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
方法来得到解析的结果。在上面的代码中,capitalizedWord
、word
和 number
都是 NFA 而不是字符串,所以这里并不存在重复解析的过程。
Last updated
Was this helpful?