Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在外部单引号之间匹配字符串_C++_Regex - Fatal编程技术网

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的正则表达式。