【发布时间】:2019-02-06 12:40:15
【问题描述】:
假设我有这样的词; 合并 。我想搜索该单词的所有 1 个字母差异组合。 aert、ert、meat、mmert、merst、merts 等都适用。所以我的正则表达式就像
[a-z]{0,2}ert OR m[a-z]{0,2}rt OR me[a-z]{0,2}t OR mer[a-z]{0,2}
所以对于 n 个字母的差异,我只需将 2 替换为 n-1 并且您无法获得所有组合。
我的问题是这样的;有没有更短的方法来编写这个正则表达式?
谢谢
【问题讨论】:
-
您的正则表达式不适用于所有大于 1 的
n字母差异。例如,如果n=2、mierts(有 2 个插入m[i]ert[s])与您的不匹配正则表达式。或者这是故意的,您只是在寻找n大小的子字符串插入,而不是n的 Levenshtein distance? -
@KevinCruijssen 感谢您指出这一点。此外,levenshtein distance 看起来很有希望。在数据库函数中应用它会很困难,但这是一个好的开始。你对正则表达式有什么建议吗?
-
我不确定正则表达式是否适合使用变量
nLevenshtein 距离。正则表达式会很大,可能需要回溯才能知道您已经为n>1匹配的子字符串大小。由于 MariaDB 基于 MySQL iIrc,也许搜索“Levenshtein distance MySQL function”可能会有所帮助开始搜索结果? -
一些正则表达式库(例如TRE、PyPi正则表达式)中有模糊匹配功能,但MariaDB中使用的PCRE库没有。