为什么我的正则表达式可以用JavaScript,但不能用C++
Why does my regex work JavaScript but not in C++?
我的正则表达式应该捕获所有函数声明的名称:
([w{1}][w_]+)(?=(.+{)
在JavaScript中,它按预期工作:
'int main() {rnfunctionCall();rnfunctionDeclaration() {}rn}'.match(/([w{1}][w_]+)(?=(.+{)/g);
// [ 'main', 'functionDeclaration' ]
在C++Builder中,我得到了这个错误:
regex_error(error_badrepeat(:*之一+{前面没有有效的正则表达式。
最小可复制性示例:
#include <iostream>
#include <regex>
#include <string>
#include <vector>
using namespace std;
int main() {
vector<string> matches;
string text = "int main() {rnfunctionCall();rnfunctionDeclaration() {}rn}";
try {
//regex myRegex("([\w{1}][\w_]+)(?=\()"); works as intended
regex myRegex("([\w{1}][\w_]+)(?=\(.+{)"); // throws error
sregex_iterator next(text.begin(), text.end(), myRegex);
sregex_iterator end;
while (next != end) {
smatch match = *next;
cout << match.str() << endl;
next++;
}
} catch (regex_error &e) {
cout << "([\w{1}][\w_]+)(?=\(.+{)"
<< "n"
<< e.what() << endl;
}
}
我用g++编译了上面的内容,而不是C++Builder,它给出的错误是不同的:Unexpected character in brace expression.
C++的正确正则表达式字符串文字是:
"([\w{1}][\w_]+)(?=\(.+\{)"
与JavaScript不同,{
必须转义。
相关文章:
- 是否可以将函数导入命名空间,但不能导出它?
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- std::chrono::d uration 可以按秒初始化,但不能按毫秒初始化?
- Python/C++:可以导入犰狳(arma::)但不能导入子程序arma::arma_rng::randn
- 为什么我可以从C++文件中读取 int 值,但不能浮点?
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- SqLite c++,可以创建数据库,但不能将 anthing 插入到表中
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 16 位系统中的程序如何访问大于 65535 的整数,但不能访问地址
- C++:返回本地对象,但不能正常工作
- 可以访问一个类中的播放器结构,但不能访问另一个类中的播放器结构
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- 用C++替换std::字符串中的一个子字符串,但不能全部替换
- 我可以在Windows(Visual C++)中读取bin文件,但不能在linux(GCC)上读取bin文件
- QProcess可以启动程序,但不能启动python(命令行)
- C++11 向量包含 2 个不同的子类,但不能同时进行
- Eclipse 中的 Makefile 项目可以运行,但不能调试,为什么?
- 一个对象什么时候可以有非零大小的一个,但不能同时具有一个或多个字节的存储