std::string s("AAA");
std::smatch m;
std::regex e("(?=.{3,}[A-Z])(?=.{0,}[a-z]).*");
output = std::regex_search(s, m, e);
这里应该有3个或更多大写字母和零个或多个小写字母。然而输出为0,意味着失败了。当我尝试将0替换为1并使用s("AAA4")时,它可以正常工作。
所以现在我想让它允许零个或多个,但好像它不接受零。我甚至尝试了等价于{0,}的量词符“*”,仍然无法工作。
这里是一个例子:
string1 "AAA"
string2 "AAAb"
string3 "AbAA"
以下正则表达式适用于字符串1和字符串2,因为大写字母是连续的:
[A-Z]{3,}[a-z]*
以下正则表达式适用于string2和string3,但当没有小写字母时,即使我指定为0,它也无法工作。
(?=.{3,}[A-Z])(?=.{0,}[a-z]).*
我需要的是一个正则表达式,可以处理以下所有情况:
- 允许0个或多个小写字母出现
- 验证字符串中是否有3个大写字母,但它们不必像字符串3那样连续出现
std::regex e("(?:[^A-Z]*[A-Z]){3}");
来检查一个包含3个大写ASCII字母的字符串? - Wiktor Stribiżew