正则表达式模糊匹配

Fuzzy match by regular expression

如何通过正则表达式做一个"fuzzy search"?

例如,文本 "hp laptop" 可能是以下任何一项的模糊匹配:

xxx hp laptop
hp xxx laptop
laptop xxxxx hp

对每个单词使用前瞻:

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

\b 表示 "word boundary",因此 "bhp""laptops" 不匹配。

live demo

前瞻,其形式为 (?=...),断言(但不使用)输入与正则表达式匹配(本例中的点 ...)。因为它不消耗输入,所以指针在计算时不会前进,因此您可以在同一点进行多个前瞻。

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

在搜索查询中使用尽可能多的这些前瞻性词。

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

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

需要使用单词边界\b以避免'fleshpot'和hplaptop等匹配

test