我有一本庞大的字典,我试图通过使用正则表达式来查看。我想要做的是找到字典中的所有单词,其中包含我提供的每个字符的至少一个出现次数。
现在我可以找到只包含指定字符的单词,但就像我说的那样,这并不是我想要的。
示例:
我希望至少出现以下每个字符{b,a,d}
astring.matches(正则表达式)
我希望这样的话:
巴德, 最不好的, 折流板
请注意,它们都包含每个字符的至少一个出现但没有特定顺序,字符串中还有其他字符。
任何人都知道如何做到这一点?其他建议也欢迎!
答案 0 :(得分:2)
如果可用,您可以使用前瞻来执行此操作
(?=.*b)(?=.*a)(?=.*d)
然而,这是非常低效的。您有什么理由不能使用多个String.indexOf
支票吗?
答案 1 :(得分:2)
您需要一系列预见:
^(?=.*b)(?=.*a)(?=.*d).*
这是一个痛苦的构建。但是,您可以使用正则表达式来构建它来缓解痛苦:
String regex = "^" + "bad".replaceAll(".", "(?=.*$0)") + ".*";
如果反复使用String.matches()
,最好使用以下代码,因为对String.matches()
的每次调用都会再次编译正则表达式(没有缓存):
// do this once
Pattern pattern = Pattern.compile(regex);
// reuse the pattern many times
if (pattern.matcher(input).matches())