问题描述
我想使用像正则表达式这样的语言来匹配可变字符串(在我的情况下,存储在图形数据库中的字符|单词|数字序列)。
我找到了实现RegEx引擎的方法: https://deniskyashif.com/2019/02/17/implementing-a-regular-expression-engine/
问题在于它与静态字符串匹配。我的情况就是我所说的可变字符串/序列。
F.e。假设我存储了以下序列:
谁为什么;什么时候;在哪里;
请记住,我没有可用的序列(以便我可以遍历它们),它们被解构为图形。 (您可以将序列的接口想像成一个函数,给定前缀可以预测/返回下一个字符)
如果我与regex匹配:w *,则应该匹配/返回所有字符串,一个又一个/如回溯/
如果我使用:whe * =>何时,何地
等。
是否可以通过修改NFA和DFA的方式来容纳可变字符串?
我刚刚开始探索实施NFA,并且认为必须在此进行更改:
function search(nfa,word) { .... }
必须进行搜索以传递下一个预期的正则表达式符号/状态,即,鉴于前一个字符串符号,下一个预测的字符串符号是否与预期的正则表达式符号匹配?
正则表达式应该“驱动”匹配,而不是字符串!这是可行的,因为正则表达式会随着转换而解构成有限状态。
你怎么看?
它们作为树存储在图db中...可以表示为:
lvl5: (where:.)
lvl4: (wher:e),(when:.),(whom:.),lvl3: (whe:r),(whe:n),(who:m),(who:.),(why:.)
lvl2: (wh:y),(wh:o),(wh:e)
lvl1: (w:h)
lvl0: w h y o .
解决方法
我不明白您的问题,但是此正则表达式可能是答案:
<prefix>.*?\b
<prefix>
是w
或whe
等的地方。
这将匹配输入中所有以前缀开头的单词。
无论您使用哪种语言,都应该有一种方法可以遍历为给定输入找到的所有匹配项。