C++ 在外部单引号之间匹配字符串
我有以下数据:C++ 在外部单引号之间匹配字符串,c++,regex,C++,Regex,我有以下数据: 将''A'组合到'\C0' 将''%1!''组合到'\E0' 将“\''A”组成“\C1” 将'\''a'组合到'\E1' 将“^”A“组合到“\C2” 将“^”a“组合到“\E2” 所有的引号都是单引号 我有这个正则表达式 \'(\\.|[^\'])*\' 它匹配我想要的全部匹配,但它包含外部单引号 这个字符串compose'\''A'to'\C1'给了我'\'和'A'和'\C1'但是我需要\'和A和\C1 我可以从字符串中删除第一个和最后一个单引号,但我希望使用正则表达式
将''A'组合到'\C0'
将''%1!''组合到'\E0'
将“\''A”组成“\C1”
将'\''a'组合到'\E1'
将“^”A“组合到“\C2”
将“^”a“组合到“\E2”
所有的引号都是单引号
我有这个正则表达式
\'(\\.|[^\'])*\'
它匹配我想要的全部匹配,但它包含外部单引号
这个字符串compose'\''A'to'\C1'
给了我'\'
和'A'
和'\C1'
但是我需要\'
和A
和\C1
我可以从字符串中删除第一个和最后一个单引号,但我希望使用正则表达式
请问我怎样才能得到我想要的结果
至于正则表达式引擎,它用于qt5核心应用程序,因此c++您的正则表达式中已经有一个组-您可以阅读它 如果有名为
std::smatch
的results
(或任何您使用的名称),则将为您提供第一个(也是唯一的)组-前提是字符串实际匹配,否则为UB
std::regex r {"\'(\\.|[^\'])*\'"};
std::string input = "compose '`' 'A' to '\\C0'";
std::smatch results;
if(std::regex_search(input, results, r)) {
std::cout << results[0] << std::endl //full match
<< results[1] << std::endl; //first group
}
std::regex r{“\'(\\.[^\'])*\'”;
std::string input=“将“`A”组合到“\\C0”;
std::smatch结果;
if(std::regex_搜索(输入、结果、r)){
std::cout您的正则表达式中已经有一个组-您可以阅读它
如果有名为std::smatch
的results
(或任何您使用的名称),则将为您提供第一个(也是唯一的)组-前提是字符串实际匹配,否则为UB
std::regex r {"\'(\\.|[^\'])*\'"};
std::string input = "compose '`' 'A' to '\\C0'";
std::smatch results;
if(std::regex_search(input, results, r)) {
std::cout << results[0] << std::endl //full match
<< results[1] << std::endl; //first group
}
std::regex r{“\'(\\.[^\'])*\'”;
std::string input=“将“`A”组合到“\\C0”;
std::smatch结果;
if(std::regex_搜索(输入、结果、r)){
std::cout你的正则表达式不是最优的。我不知道你到底可以匹配什么,但是从你给我们的数据来看,这个正则表达式会起作用:\s\'(\s+?\)\'
std::regex reg(R"(\s\'(\S+?\'?)\')");
std::string input = R"(
compose '`' 'A' to '\C0'
compose '`' 'a' to '\E0'
compose '\'' 'A' to '\C1'
compose '\'' 'a' to '\E1'
compose '^' 'A' to '\C2'
compose '^' 'a' to '\E2')";
auto begin = std::sregex_iterator(input.begin(), input.end(), reg);
auto end = std::sregex_iterator();
for (auto it = begin; it != end; ++it)
std::cout << (*it)[1].str() << '\n';
std::regex reg(R“(\s\”(\s+?\”?)\”);
std::字符串输入=R“(
将''%1!''组成'\C0'
将''%1!''组合到'\E0'
将“\''A”组成“\C1”
将'\''a'组合到'\E1'
将“^”A“组合到“\C2”
将“^”a“组成“\E2”)”;
auto begin=std::sregex_迭代器(input.begin(),input.end(),reg);
auto end=std::sregex_迭代器();
for(自动it=开始;it!=结束;++it)
std::cout你的正则表达式不是最优的。我不知道你到底可以匹配什么,但是从你给我们的数据来看,这个正则表达式会起作用:\s\'(\s+?\)\'
std::regex reg(R"(\s\'(\S+?\'?)\')");
std::string input = R"(
compose '`' 'A' to '\C0'
compose '`' 'a' to '\E0'
compose '\'' 'A' to '\C1'
compose '\'' 'a' to '\E1'
compose '^' 'A' to '\C2'
compose '^' 'a' to '\E2')";
auto begin = std::sregex_iterator(input.begin(), input.end(), reg);
auto end = std::sregex_iterator();
for (auto it = begin; it != end; ++it)
std::cout << (*it)[1].str() << '\n';
std::regex reg(R“(\s\”(\s+?\”?)\”);
std::字符串输入=R“(
将''%1!''组成'\C0'
将''%1!''组合到'\E0'
将“\''A”组成“\C1”
将'\''a'组合到'\E1'
将“^”A“组合到“\C2”
将“^”a“组成“\E2”)”;
auto begin=std::sregex_迭代器(input.begin(),input.end(),reg);
auto end=std::sregex_迭代器();
for(自动it=开始;it!=结束;++it)
std::cout您的正则表达式需要稍加修改,多次捕获一个组并不能真正起作用。您真正想要的是一个包含零个或多个\\\副本的组。\[^\]
expression。您可以使用非捕获组执行此操作,该组通过在组的左括号内添加?:
来编写。完整的正则表达式如下:
\'(((?:\.\.[^\'])*)\'
您可以在上试用。您的正则表达式需要稍加修改,多次捕获一个组实际上不起作用。您真正想要的是一个包含零个或多个\\\副本的组。|[^\']
expression。您可以使用非捕获组执行此操作,该组通过在组的左括号内添加?:
来编写。完整的正则表达式如下:
\'(((?:\.\.[^\'])*)\'
您可以在上试用。我认为它不是100%正确。将数据和正则表达式粘贴到regex101.com中,您就会看到。例如,数据中的第三行给出了错误的结果。更正:每行的第三项在结果中给出了错误的结果[1]我认为它不是100%正确。将数据和正则表达式粘贴到regex101.com中,您将看到。例如,数据中的第三行给出了错误的结果。更正:每行的第三项在结果中给出了错误的结果[1]Thx.我选择了你的答案作为接受答案,因为它的处理速度略快于Timo的正则表达式。Thx.我选择了你的答案作为接受答案,因为它的处理速度略快于Timo的正则表达式。