正则表达式匹配包含至少指定字符的字符串

时间:2013-05-01 01:49:05

标签: java regex

我有一本庞大的字典,我试图通过使用正则表达式来查看。我想要做的是找到字典中的所有单词,其中包含我提供的每个字符的至少一个出现次数。

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

示例:

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

astring.matches(正则表达式)

我希望这样的话:

巴德, 最不好的, 折流板

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

任何人都知道如何做到这一点?其他建议也欢迎!

2 个答案:

答案 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())