匹配字符串的正则表达式,该字符串以与开头相同的序列结束

Regex that matches a string that ends with the same sequence as it begins

本文关键字:字符串 开头 结束 正则表达式      更新时间:2023-10-16

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

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_