使用正则表达式的无限循环

时间:2017-06-24 15:37:21

标签: java regex cycle

我的正则表达式或循环语句出了什么问题?我需要8个字符组合,一个数字,一个字母大写,一个小写最小。 但我得到一个不停的循环。

items.sort(function (a, b) {
return a.score - b.score;
});

2 个答案:

答案 0 :(得分:0)

问题是Java matches()必须匹配整个字符串才能返回true,因此您的循环条件将始终为真(输入可以&#39 ; t所有数字所有字母)。

有两种方法可以解决您的问题:

1)将.*添加到正则表达式的每一端:

if (!out.matches(".*[0-9].*") | !out.matches(".*[a-z].*") | !out.matches(".*[A-Z].*")) 

2)使用一个虽然更复杂的正则表达式:

if (!out.matches("(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8}"))

最后一个选项还会检查长度是否为8。

另请注意,您不需要^$ matches() - 合同暗示了这些内容。

答案 1 :(得分:0)

有几件事:

  • 正则表达式不一定是表达此类约束的最佳方式。在计算每种字符类型的出现次数时,只需一次查看密码就可以解决这个问题。

  • 您使用的是二进制[AVAlexSpeechSynthesisVoice 0x1700150d0] Language: en-US, Name: Alex, Quality: Enhanced [com.apple.speech.voice.Alex] OR)而不是逻辑|OR)。对于布尔语,它的行为会相同,但你几乎肯定没有故意这样做。

  • 正则表达式结束时的美元意味着字符串结尾。你并不关心角色是在字符串的开头,中间还是末尾,你只想让它某处

  • ||尝试匹配整个字符串。您的代码可以使用matches代替,也可以在每个正则表达式的两端添加find