为什么 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}
将上一个令牌\d
从 0 到 5 重复。 (-)?
会将捕获组转换为可选。因此-
符号可能会或可能不会发生。 .
是正则表达式中的一个特殊元字符,它匹配除换行符(n
、r
)以外的任何字符。但在 DOTALL 模式下,点也会匹配换行符(在其他语言中)。要匹配文字点,您需要将点放入字符类中,例如[.]
,或者需要像\.
一样转义点
(-)?(\d){0,5}(.)?(\d){0,10}
| |
catures the first `-` | This captures the second `-`
请注意,此正则表达式也匹配空字符串。
演示
因为在 (-)?(\d){0,5}(.)?
中,您可以选择匹配-
。检查。然后,最多\d
五次。检查。然后,任何事情都与.
.检查。其余部分再次\d
,最多十次。检查。
要点在-
和.
,它们再次匹配-
和-
。
看起来您尝试解析一个数字。你犯了一个错误:"."表示正则表达式中的任何符号,所以你应该屏蔽它以使其只匹配点本身:
std::regex reg("(-)?(\d){0,5}(\.)?(\d){0,10}");
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 奇怪的结构&GCC&clang(void*返回类型)
- 架构决策:返回std::future还是提供回调
- 从python中调用C++函数并获取返回值
- 矩阵向量乘法(cublasDgemv)返回零
- 对简单的帐户检查程序有问题?程序返回编译错误,指出"no match for 'operator||' unsure of how to fix?"