试图理解基本的正则表达式函数在c++
Trying to understand basic regex functions in C++
我已经在Perl中使用正则表达式很多年了,现在正尝试在c++中使用它们。不过遇到了一些问题。我想解析一个字符串,如translate(0.0,-572.36218)
,并获取2个数值。
到目前为止我写的是:
std::cmatch m;
std::regex e("([-|.|0-9]*),([-|.|0-9]*)" );
std::regex_search ("translate(0.0,-572.36218)",m,e);
float xTransform = atof(m[1].first);
float yTransform = atof(m[2].first);
然而,当我在调试器中查看这些值时,我看到的是:
m[0].first = "0.0,-572.36218)"
m[1].first = "0.0,-572.36218)"
m[3].first = "-572.36218)";
如果我使用正则表达式调试工具(如正则表达式教练),我可以看到我的正则表达式在语法上是正确的。我想我只是不知道我这样做是否正确,或者如何从cmatch
实例中提取我需要的数据。
更新:我一定错过了什么,因为如果我把正则表达式改成这样:
std::regex e("([0-9])");
m返回只有2个条目深度,并且每个条目的第一个元素= "0.0,-572.36218)"。为什么这个匹配括号,我不明白。而[0-9]似乎没有效果……它匹配每个字符。非常fristrating。(
你应该用\.
。当您使用.
时,它匹配整个字符串—因为.
被C转义为简单的.
。后来,.
在[-|.|0-9]*
中乘以*
以匹配任何内容
其他人已经指出需要在RE中转义反斜杠。c++ 11提供了另一种选择:原始字符串字面量。例如:
std::regex e(R"(([-|.|0-9]*),([-|.|0-9]*))");
请注意,这里的开始分隔符是"(
,结束分隔符是)"
,所以我在字符串中添加了一个额外的"("answers")"。
的大量使用使得原始字符串在定义res时特别方便。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 用回调函数替换C++正则表达式
- 正则表达式,用于类似 python 的函数参数解析
- C++正则表达式库,替换为函数指针
- 用于获取函数签名的 C++ 正则表达式
- 为什么C++标准使正则表达式算法成为免费函数
- 函数正则表达式C++在 linux(CentOS) 中遇到错误,但在 OSX 中
- 正则表达式:获取 CPP 函数 (c#) 的单独参数和参数类型
- 用于查找函数的正则表达式
- 在使用正则表达式执行函数时逐行解析inffile
- 设置正确的正则表达式以使用PasswordFilter函数
- 试图理解基本的正则表达式函数在c++