使用替换功能的通配符搜索
wildcard search using replace function
我尝试使用一些算法(k-gram 算法等)在我的应用程序中实现通配符搜索,但它非常复杂。
直到我找到这段代码,它工作得很好..但我不知道它是如何检查和得到结果的!
代码:
public static boolean wildCardMatch(String text, String pattern)
{
return text.matches( pattern.replace("?", ".?").replace("*", ".*?") );
}
他们有没有人帮助我知道它是如何工作的? replace函数是什么意思?
您使用的方法是String.replace(CharSequence target, CharSequence replacement)
。
它需要两个实现CharSequence
接口的对象作为参数,可能是以下之一:
CharBuffer
Segment
String
StringBuffer
StringBuilder
并在 String
中用第二个 CharSequence
替换第一个 CharSequence
。
在你的例子中,如果 pattern
参数包含 **??
,text.matches
方法将得到 .?.?.*?.*?
作为输入,这就是 [=24] =] 参数也必须包含(根据 regular expressions),以便成功匹配它们和方法 return true
.
澄清一下:
Difference between .*?
and .*
for regex
你说的是glob pattern.
在 Java 世界中,glob 模式更常被转换为正则表达式模式。
在您的方案中,实现非常基本:replace
方法用于将所有出现的 ?
替换为正则表达式等价物 .?
。然后所有出现的 *
都被替换为 .*?
.
因此,如果您有以下 glob 模式:abc*.def
,则正则表达式将变为 abc.*?.def
.
当正则表达式最终准备就绪时,将使用方法 matches
对变量 text
进行检查。后一种方法接受正则表达式作为输入。
我尝试使用一些算法(k-gram 算法等)在我的应用程序中实现通配符搜索,但它非常复杂。
直到我找到这段代码,它工作得很好..但我不知道它是如何检查和得到结果的!
代码:
public static boolean wildCardMatch(String text, String pattern)
{
return text.matches( pattern.replace("?", ".?").replace("*", ".*?") );
}
他们有没有人帮助我知道它是如何工作的? replace函数是什么意思?
您使用的方法是String.replace(CharSequence target, CharSequence replacement)
。
它需要两个实现CharSequence
接口的对象作为参数,可能是以下之一:
CharBuffer
Segment
String
StringBuffer
StringBuilder
并在 String
中用第二个 CharSequence
替换第一个 CharSequence
。
在你的例子中,如果 pattern
参数包含 **??
,text.matches
方法将得到 .?.?.*?.*?
作为输入,这就是 [=24] =] 参数也必须包含(根据 regular expressions),以便成功匹配它们和方法 return true
.
澄清一下:
Difference between .*?
and .*
for regex
你说的是glob pattern.
在 Java 世界中,glob 模式更常被转换为正则表达式模式。
在您的方案中,实现非常基本:replace
方法用于将所有出现的 ?
替换为正则表达式等价物 .?
。然后所有出现的 *
都被替换为 .*?
.
因此,如果您有以下 glob 模式:abc*.def
,则正则表达式将变为 abc.*?.def
.
当正则表达式最终准备就绪时,将使用方法 matches
对变量 text
进行检查。后一种方法接受正则表达式作为输入。