小编典典
使用一个简单的正则表达式
这种方法的好处之一是,我们还可以轻松添加令牌*(请参阅底部的 添加令牌 )。
搜索: [^*]+|(\*)
|匹配项的左侧匹配不是星号的所有字符
右侧将所有星星捕获到第1组
如果第1组为空:替换为\Q+匹配+E
如果设置了组1:替换为 .*
这是一些工作代码(请参阅在线演示的输出)。
输入: audio*2012*.wav
输出: \Qaudio\E.*\Q2012\E.*\Q.wav\E
String subject = "audio*2012*.wav";
Pattern regex = Pattern.compile("[^*]+|(\\*)");
Matcher m = regex.matcher(subject);
StringBuffer b= new StringBuffer();
while (m.find()) {
if(m.group(1) != null) m.appendReplacement(b, ".*");
else m.appendReplacement(b, "\\\\Q" + m.group(0) + "\\\\E");
}
m.appendTail(b);
String replaced = b.toString();
System.out.println(replaced);
添加令牌
假设我们还想?用一个点将通配符(代表单个字符)转换。我们只是将捕获组添加到正则表达式,并将其从左侧的matchall中排除:
搜索: [^*?]+|(\*)|(\?)
在replace函数中,我们添加如下内容:
else if(m.group(2) != null) m.appendReplacement(b, ".");
2020-10-20