Regexp至少8个符号,只有一个大写字符

时间:2018-03-21 17:59:01

标签: regex

我需要一个包含至少8个符号且只有一个大写字符的字符串的正则表达式。爪哇

例如,它应匹配:

  • Asddffgf
  • asdAsadasd
  • asdasdaA

但不是:

  • adadAasdasAsad
  • AsdaAadssadad
  • asdasdAsadasdA

我试过这个:^[a-z]*[A-Z][a-z]*$这很好,但我需要至少8个符号。

然后我尝试了这个:(^[a-z]*[A-Z][a-z]*$){8,}但它不起作用

2 个答案:

答案 0 :(得分:3)

^(?=[^A-Z]*[A-Z][^A-Z]*$).{8,}$

https://regex101.com/r/zTrbyX/6

说明:

^ - 锚定到字符串的开头,以便以下前瞻限制不会跳过任何内容。

(?= ) - 积极前瞻;断言字符串的开头后跟包含的模式。

[^A-Z]*[A-Z][^A-Z]*$ - 任意数量的字符序列,不是大写字母,然后是单个大写字母,然后是非大写字母,直到字符串结尾。这可以确保整个字符串中只有一个大写字母。

.{8,} - 任何非换行符八次或更多次。

$ - 锚定在字符串的末尾(可能不必要,具体取决于您的要求)。

答案 1 :(得分:0)

在您的第一个正则表达式^[a-z]*[A-Z][a-z]*$中,您可以在(?=[a-zA-Z]{8,})之后添加一个正向预告^

这将断言后面的内容与小写或大写字符至少匹配8次。

^(?=[a-zA-Z]{8,})[a-z]*[A-Z][a-z]*$