[英]Why std::regex_match will return true?
有人可以向我解释-为什么此代码在std :: regex_match之后返回true?
std::regex reg("(-)?(\\d)\{0,5\}(.)?(\\d)\{0,10\}");
std::string str("--");
std::regex_match(str, reg);
谢谢!
因为您将某些捕获组更改为可选,而将某些捕获组重复了零次或多次。 (\\\\d)\\{0,5\\}
从0到5重复前一个标记\\\\d
。 (-)?
会将捕获组设为可选。 因此-
符号可能会或可能不会出现。 .
是正则表达式中的特殊元字符,它匹配除换行符( \\n
, \\r
)以外的任何字符。 但是在点播模式下,点也将与换行符匹配(使用其他语言 )。 要匹配文字点,您需要将点放在[.]
类的字符类中,或者需要将点转义为\\\\.
(-)?(\\d)\{0,5\}(.)?(\\d)\{0,10\}
| |
catures the first `-` | This captures the second `-`
请注意,此正则表达式还匹配一个空字符串。
因为在(-)?(\\\\d)\\{0,5\\}(.)?
,您可以匹配-
可选。 校验。 然后, \\\\d
高达五倍。 校验。 然后,一切都会发生.
。 校验。 余数再次\\\\d
,最多十次。 校验。
要点是-
和.
,其匹配-
和-
一次。
似乎您尝试解析数字。 你犯了一个错误: '。' 表示regexp中的任何符号,因此您应该屏蔽它以使其仅与点本身匹配:
std::regex reg("(-)?(\\d)\{0,5\}(\\.)?(\\d)\{0,10\}");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.