检测圆括号,包括打开和关闭
Detect round bracket, both open and close
我需要破坏诸如"(a+b*9 )-10"
之类的表达式来提取/检测(
并)
。
这就是我现在所拥有的,但这两种情况都不起作用。
const regex Parser::rxOpenBracket = regex("^\s*[(]\s*$");
const regex Parser::rxCloseBracket = regex("^\s*([)])\s*$");
一些帮助会很好。谢谢!
或者
正则表达式中的你可以写它:
const regex Parser::bracketPair = regex("\(.+?\)");
表达式翻译如下:
(.+?)
( => The opening bracket (escaped as ( would indicate a group in regex)
. => Any character
* => Zero or more times (referring to the .)
? => Lazy, stop as soon as possible (referring to the *)
) => End bracket, also escaped
通过使用此选项,您只会找到以左括号开头的命中,后跟无字符或任意数量的字符,直到找到右括号。
例如,将处理(hello world)
,但)hello world(
将被忽略
s
匹配空格,^
匹配字符串的开头,$
匹配结尾。因此,实际上,您的正则表达式只会匹配包含单个左/右括号的字符串,可以选择在空格之前/后面添加空格。不允许使用其他字符。
如果您真的只寻找括号字符,那么正则表达式是矫枉过正的。只需使用std::string::find_first_of()
:
std::string data("(a+b*9 )-10");
for (std::size_t idx = data.find_first_of("()"); idx != data.npos; idx = data.find_first_of("()", idx + 1))
{
//idx now holds the index of a parenthesis:
assert(data[idx] == '(' || data[idx] == ')');
}
删除锚点^
并$
:
const regex Parser::rxOpenBracket = regex("\s*[(]\s*");
const regex Parser::rxCloseBracket = regex("\s*([)])\s*");
^
和$
是行的开头和结尾的锚点。如果你只是想找出是否有任何括号,而不一定在行的开头或结尾,你可以省略这些括号。
此外,由于您匹配长度为 0 或更大的空格,除非您匹配以删除它(将其替换为空字符串),否则您也可以省略它。
那给你留下了
const regex Parser::rxOpenBracket = regex("\(");
const regex Parser::rxCloseBracket = regex("\)");
或者,如果您愿意,
const regex Parser::rxOpenBracket = regex("[(]");
const regex Parser::rxCloseBracket = regex("[)]");
相关文章:
- C++decltype和圆括号-为什么
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 为什么 cmake 许可证<>样式不包括?
- 计算平均值,不包括上次得分
- 是否基于数组B整数打印数组A中的整数
- 从多个源构造一个对象,包括一个对象向量
- 如何打印数组对角线的一侧
- 在编译中包括 Botan 2
- 将值从另一个数组写入数组,不包括不需要的值 C++
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 包括C++头文件
- CPP 包括 Azure DevOps 中的目录设置
- 包括STL,而不会乱扔全球范围
- 如何反转我的输入,包括否定
- 包括没有完整路径的我的库
- 如何在 android ndk 上链接 C 和 C++ 代码,以及 C 和 C++ 运行时库(包括 STL)?
- 分段 Linux Ubuntu 中的 g++ 错误,但在 Windows 中的 g++/MingW 中,在 C++ 中打
- C++包括类名间距和类实例化
- 检测圆括号,包括打开和关闭