使用替换函数的通配符搜索

时间:2015-12-29 16:03:26

标签: java search wildcard

我尝试使用一些算法(k-gram算法等)在我的应用程序中实现通配符搜索,但它非常复杂。

直到我找到这个代码,它才能完美运行..但我不知道如何检查并获得结果!

代码:

public static boolean wildCardMatch(String text, String pattern)
{
  return text.matches( pattern.replace("?", ".?").replace("*", ".*?") );
}

他们是否有人帮助我知道它是如何工作的?替换功能的想法是什么?

2 个答案:

答案 0 :(得分:3)

您所说的内容称为 glob pattern

在Java世界中,glob模式经常被翻译成正则表达式模式。

在您的方案中,实现非常基础:replace方法用于将所有出现的?替换为正则表达式等效.?。然后*的所有出现都被.*?替换。

因此,如果您有以下全局模式:abc*.def,则正则表达式将变为abc.*?.def

当正则表达式最终准备就绪时,使用方法text对变量matches进行检查。后一种方法接受正则表达式作为输入。

答案 1 :(得分:1)

您使用的方法是String.replace(CharSequence target, CharSequence replacement)

实现CharBuffer接口作为参数需要两个对象,可能是以下之一:

  • Segment
  • String
  • StringBuffer

  • StringBuilder
  • CharSequence

并用CharSequence中的第二个String替换第一个pattern的每个出现。

在您的情况下,如果**??参数包含text.matches.?.?.*?.*?方法将获得text作为输入,那就是true {1}}参数也必须包含(根据regular expressions),以便成功匹配它们以及返回private LongProperty score = new SimpleLongProperty(0); 的方法。

澄清:

Difference between .*? and .* for regex