-1

我有一本巨大的字典,我正在尝试使用正则表达式来查看。我想做的是找到字典中的所有单词,这些单词至少包含我提供的每个字符的一次出现,没有特定的顺序。

现在我可以找到只包含指定字符的单词,但就像我说的那样,这并不是我想要的。

例子:

我希望以下每个字符至少出现一次 {b, a, d}

astring.matches(正则表达式)

我希望这样的话:

更坏的,最坏的,困惑的

请注意,它们都包含每个字符至少出现一次,但没有特定顺序,并且字符串中存在其他字符。

有人知道怎么做吗?也欢迎其他建议!

4

2 回答 2

2

如果可用,您可以使用前瞻来执行此操作

(?=.*b)(?=.*a)(?=.*d)

然而,这是非常低效的。有什么理由不能使用多个String.indexOf检查?

于 2013-05-01T01:51:25.877 回答
2

您需要一系列前瞻:

^(?=.*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())
于 2013-05-01T02:19:34.933 回答