正则表达式匹配一个字符串,它以开头的相同顺序结束

我有一个字符串,其中包含许多始终以下划线开头和结尾的唯一序列。 我正在寻找一个返回这些序列之间的字符串的一部分的正则表达式。 我试图为前两个下划线之间的所有内容创建一个捕获组,然后在中间有一些字符,最后我尝试匹配第一个捕获组。 但它不匹配任何东西:

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);

问题是我不知道序列是什么,我只知道它们以下划线开头和结尾(否则这将很容易解决......)。 有人知道这个正则表达式吗?


你的问题是.*是贪婪的 - 所以它匹配UNIQUESEQUENCE_somemorethings_UNIQUESEQUENCE ,然后整个正则表达式无法匹配。

解决方案其实很简单。 你知道UNIQUESEQUENCE结束于第一个_,所以不符合它。 使用以下正则表达式:

_([^_]*)_.*_$1_
链接地址: http://www.djcxy.com/p/76707.html

上一篇: Regex that matches a string that ends with the same sequence as it begins

下一篇: A Regex that will never be matched by anything