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