我有一个字符串,其中包含许多始终以下划线开头和结尾的唯一序列。我正在寻找一个正则表达式,返回这些序列之间的字符串部分。我尝试为前两个下划线之间的所有内容创建一个捕获组,然后在中间和最后有一些字符,我尝试匹配第一个捕获组。但它与任何东西都不匹配:
std::string s = "somerandomstuff_UNIQUESEQUENCE_somemorethings_UNIQUESEQUENCE_morewords"
std::regex seq("_(.*)_.*_$1_", std::regex_constants::extended);
std::smatch m{};
std::regex_search(s, m, seq);
问题在于我不知道序列是什么,我只知道它们以下划线开头和结尾(否则这将很容易解决......)。有人知道这个正则表达式吗?
答案 0 :(得分:1)
你的问题是.*
贪婪 - 所以它匹配UNIQUESEQUENCE_somemorethings_UNIQUESEQUENCE
,然后整个正则表达式无法匹配。
解决方案实际上非常简单。你知道UNIQUESEQUENCE在第一个_结束,所以不要匹配它。使用正则表达式:
_([^_]*)_.*_$1_