我需要一个包含至少8个符号且只有一个大写字符的字符串的正则表达式。爪哇
例如,它应匹配:
但不是:
我试过这个:^[a-z]*[A-Z][a-z]*$
这很好,但我需要至少8个符号。
然后我尝试了这个:(^[a-z]*[A-Z][a-z]*$){8,}
但它不起作用
答案 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次。