正则表达式的模糊匹配

时间:2015-09-17 10:49:11

标签: regex fuzzy-search

如何通过正则表达式进行“模糊搜索”?

例如,文本“hp laptop”可能是以下任何一种模糊匹配:

xxx hp laptop
hp xxx laptop
laptop xxxxx hp

2 个答案:

答案 0 :(得分:2)

我建议分别测试/\bhp\b/ig/\blaptop\b/ig,如果先通过然后测试第二个,这是最简单的方法。

这个/(\bhp\b).*(\blaptop\b)|(\blaptop\b).*(\bhp\b)/gi可以很好地测试字符串中是否同时包含'hp'和'laptop'字样,但它不是很灵活。

有必要在oder中使用单词边界\b来避免'fleshpot'和hplaptop等匹配。

Designer 8.5.3 Help - Setting up automatic mailing

答案 1 :(得分:1)

对每个单词使用预测:

(?=.*\bhp\b)(?=.*\blaptop\b).*

\b表示"字边界",因此"bhp""laptops"不匹配。

请参阅live demo

具有(?=...)形式的预测断言(但不消耗)输入与正则表达式匹配(在此示例中为点...)。因为它不会消耗输入,所以指针在评估时不会前进,因此您可以在同一点上有多个前瞻。

阅读this以获得更详细的解释。

在搜索查询中使用单词时,尽可能多地使用这些预测。