regex - 构建正则表达式编写器

标签 regex algorithm

我正在阅读 Java 项目想法 described here :

The user gives examples of what he wants and does not want to match. The program tries to deduce a regex that fits the examples. Then it generates examples that would fit and not fit. The user corrects the examples it got wrong, and it composes a new regex. Iteratively, you get a regex that is close enough to what you need.

这对我来说听起来是个非常有趣的想法。有谁知道如何做到这一点?我的第一个想法类似于遗传算法,但我希望你们能提供一些意见。

最佳答案

实际上,这看起来越来越像一个编译器应用程序。事实上,如果我没记错的话,Aho Dragon 编译器一书使用了一个正则表达式示例来构建 DFA 编译器。这就是开始的地方。这可能是一个非常酷的编译器项目。

如果这太多了,您可以将它作为一个优化来处理,通过多次传递来进一步完善它,但它首先都是预定义的算法:

第一关:想匹配Cat,Catches jar 头 结果:/Cat|Catches|Cans/

第二遍:寻找类似的起始条件: 结果:/Ca(t|tches|ans)/

第二遍:寻找类似的结束条件: 结果:/Ca(t|tch|an)s*/

第三遍:寻找更多的改进,例如重复和负面条件

关于regex - 构建正则表达式编写器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651962/

相关文章:

python - 按非连续大写字母拆分字符串

c++ - 为我的球员名单选择最佳结构

算法:在二维整数数组中搜索整数的有效方法?

c - 如何在不使用循环、递归或 goto 语句的情况下打印一系列数值?

php - 日本/中国电子邮件地址?

javascript - jQuery 在字符串中查找 url 并用 href 换行(如果尚未换行)

python - 正则表达式在python中的字符串中查找两个相同的字符串

performance - 用于存储允许高效比较操作的值范围的数据结构

python - 在 Pyside 中绘制圆弧

regex - 使用RegEx提取并捕获字符串中的Elements,并使用条件判断该regex是否适用于给定的字符串