匹配字符串的正则表达式,该字符串以与开头相同的序列结束
Regex that matches a string that ends with the same sequence as it begins
我有一个字符串,它包含许多唯一的序列,这些序列总是以下划线开头和结尾。我正在寻找一个正则表达式,返回这些序列之间的字符串的一部分。我尝试为前两个下划线之间的所有内容创建一个捕获组,然后在中间和末尾有一些字符,我尝试匹配第一个捕获组。但是它不匹配任何内容:
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_
相关文章:
- 在 C++11 中,如何查找并返回以给定字符串开头的字符串向量中的所有项?
- 字符串开头的分隔符
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 如何在 Arduino 字符串的开头添加元素.类似于 JS unshift();
- 为什么使用 QString::right 在字符串开头省略逗号?
- cout 切断 for 循环中的字符串开头
- 如何从字符串开头到第二个分隔符中提取子字符串?
- ZeroMQ (cppzmq) 订阅者,过滤器以相同的字符串开头
- 如何检查 std::vector<std::string> 的元素是否以某个子字符串开头?
- 如何在 qt 中使用 QRegularExpression 匹配字符串开头的空格?
- DeleteFile,以子字符串开头
- 是否有函数/WinAPI 可以判断一个字符串是否以不区分大小写的语言方式以另一个字符串开头?
- 检查一个字符串是否以另一个已知字符串开头
- 如何检查const char*是否以特定字符串开头?(C++)
- 字符串以某个字符串开头
- 如何清除字符串开头的垃圾
- 删除字符串c++开头和结尾的标点符号
- 检查字符串是否以另一个字符串开头:find或compare
- C++ std::map<std::string, int> 获取键以特定字符串开头的值
- c++ getline在字符串开头添加空格