chr*_*s01 5 c++ regex non-greedy c++11
C ++ 11 RegEx有点问题,我认为这与贪婪有关。
这是一个小样本。
#include <stdio.h>
#include <string>
#include <regex>
int main (void)
{
std::string in="{ab}{cd}[ef]{gh}[ij][kl]"; // the input-string
std::regex rx1 ("(\\{.+?})(.*)", std::regex::extended); // non-greedy?
std::smatch match;
if (regex_match (in, match, rx1))
{
printf ("\n%s\n", match.str(1).c_str());
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望
{ab}
Run Code Online (Sandbox Code Playgroud)
用于输出。但是我得到了
{ab}{cd}[ef]{gh}
Run Code Online (Sandbox Code Playgroud)
我希望得到的结果是贪婪的,而不是?在。+之后。应该让它不贪心吧?
那么我的想法出了什么问题?感谢帮助!
克里斯
您需要删除std::regex::extended,它使您的正则表达式POSIX ERE兼容,并且该正则表达式风格不支持惰性量词。
std::regex rx1("(\\{.+?})(.*)");
Run Code Online (Sandbox Code Playgroud)
参见C++ 演示
| 归档时间: |
|
| 查看次数: |
2247 次 |
| 最近记录: |