繁体   English   中英

为什么std :: regex_match将返回true?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM