使用一个简单的正则表达式
这种方法的好处之一是,我们还可以轻松添加令牌
*(请参阅底部的 添加令牌 )。
搜索:
[^*]+|(*)
|
匹配项的左侧匹配不是星号的所有字符- 右侧将所有星星捕获到第1组
- 如果第1组为空:替换为
Q
+匹配+E
- 如果设置了组1:替换为
.*
这是一些工作代码(请参阅在线演示的输出)。
输入:
audio*2012*.wav
输出:
QaudioE.*Q2012E.*Q.wavE
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, ".");



