c++ - 从字符串列表生成正则表达式

标签 c++ data-structures

原始问题:

我正在阅读正则表达式格式的内容,将其扩展并写出。这个列表在写出来时会变得很大。

在写出来时,我没有原始的正则表达式数据。因此,我将不得不从我拥有的字符串中创建正则表达式。

阅读和写作的几个案例:

比如说,读取正则表达式是:

abc/*

因为 'abc' 只能有 'A'、'B'、'C'、'D'(我有这个列表),上面将被翻译成字符串列表

"abc/A", "abc/B", "abc/C", "abc/D" -- 1

比如说,另一个读取正则表达式是:

def/*/A

因为 'def' 只能有 'x', 'y', 'x'(把这个列表给我),上面会被翻译成字符串列表

"def/x/A", "def/x/A", "def/x/A" -- 2

我已经说过了,我现在没有原始的正则表达式。我所拥有的只是字符串列表。我将不得不根据第 1 条和第 2 条语句创建正则表达式。

从数字1,我​​应该得到

 abc/*

从2号开始,我应该得到

 def/*/A

哪些是原来的。

问题:哪种数据结构可以有效地解决这个问题。我曾考虑过使用 tries & Aho–Corasick 算法,但直到现在我还没有想到一个明确的解决方案。

如果不清楚,我很乐意进一步扩展问题。请考虑 * 将不匹配/、//或除字符以外的任何内容。

最佳答案

这是一个很难解决的问题。

好的可能解决方案:

第 1 步:将字符串列表转换为有限自动化。正如我提到的,我将使用“Aho–Corasick 算法”来做到这一点。

第 2 步:将有限自动化转换为正则表达式...像这样:https://cs.stackexchange.com/questions/2016/how-to-convert-finite-automata-to-regular-expressions

关于c++ - 从字符串列表生成正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49999904/

相关文章:

c++ - 导出的 DLL 函数未按词法排序?

c++ - 为什么连接多个字符串时性能会有所不同?

C++从1个字符转换为字符串?

algorithm - BuildHeap - Floyd 算法 - FixHeap 概念

c++ - 在二叉搜索树中插入新元素

c++ - 如何在内存中存储 double

c++ - make_pair(字符串,类): error: expected primary-expression before â)â token

c - 归并排序程序出错

data-structures - 词汇表中模式匹配的最佳数据结构是什么?

data-structures - 以多面体图为键的映射