C++ regex 将正则表达式转换为 C++ 代码
c++ regex convert regex to c++ code
第一次正则表达式(在 C++ 中)
我写得很辛苦
(?<=name=")(?:[^\"]+|\.)*(?=")
匹配例如 name="blabla" xyz as blabla as code...
我如何
std::regex TheName("(?<=name=")(?:[^\"]+|\.)*(?=")");
请问正确吗?
您需要在 C++ 正则表达式中使用捕获而不是正面回顾。此外,建议使用展开循环原则展开 ([^"\]|\.)*
子模式以使正则表达式尽可能快,请参阅 [^\"\]*(?:\.[^\"\]*)*
。此外,建议在定义正则表达式模式时使用原始字符串文字(参见 R"(<PATTERN>)"
)以避免过度转义。
见C++ demo:
#include <iostream>
#include <regex>
using namespace std;
int main() {
std::string s = "name=\"bla \\"bla\\"\"";
std::regex TheName(R"(name=\"([^\"\]*(?:\.[^\"\]*)*)\")");
std::smatch m;
if (regex_search(s, m, TheName)) {
std::cout << m[1].str() << std::endl;
}
return 0;
}
结果:bla \"bla\"
第一次正则表达式(在 C++ 中)
我写得很辛苦
(?<=name=")(?:[^\"]+|\.)*(?=")
匹配例如 name="blabla" xyz as blabla as code... 我如何
std::regex TheName("(?<=name=")(?:[^\"]+|\.)*(?=")");
请问正确吗?
您需要在 C++ 正则表达式中使用捕获而不是正面回顾。此外,建议使用展开循环原则展开 ([^"\]|\.)*
子模式以使正则表达式尽可能快,请参阅 [^\"\]*(?:\.[^\"\]*)*
。此外,建议在定义正则表达式模式时使用原始字符串文字(参见 R"(<PATTERN>)"
)以避免过度转义。
见C++ demo:
#include <iostream>
#include <regex>
using namespace std;
int main() {
std::string s = "name=\"bla \\"bla\\"\"";
std::regex TheName(R"(name=\"([^\"\]*(?:\.[^\"\]*)*)\")");
std::smatch m;
if (regex_search(s, m, TheName)) {
std::cout << m[1].str() << std::endl;
}
return 0;
}
结果:bla \"bla\"