匹配“可变”字符串/序列的RegEx? +回溯?

问题描述

我想使用像正则表达式这样的语言来匹配可变字符串(在我的情况下,存储在图形数据库中的字符|单词|数字序列)。

我找到了实现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>wwhe等的地方。

这将匹配输入中所有以前缀开头的单词。

无论您使用哪种语言,都应该有一种方法可以遍历为给定输入找到的所有匹配项。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...