为什么这个正则表达式在 STL 世界中是错误的?
Why is this regex wrong in the STL world?
为什么这个正则表达式在 STL 世界中是错误的?
(?<=^EXTINF:)*(d+.d+)
"?<="部分引发异常。为什么???
更新:
const char * const pm3u = { "#EXTM3U" "#EXT-X-VERSION:3"#EXT-X-MEDIA-SEQUENCE::153741\N" "#EXT-X-允许缓存:否"#EXT-X-目标持续时间:11" "#EXTINF:10.005333,""/RTS_1_009/audio/2018-03-16-H13/audio-2018-03-16-13-58-29.ts"#EXTINF:9.984000,"/RTS_1_009/audio/2018-03-16-H13/audio-2018-03-16-13-58-39.ts">
#EXTINF:10.005333,""/RTS_1_009/audio/2018-03-16-H13
/audio-2018-03-16-13-58-49.ts">
"#EXTINF:10.005333,">
"/RTS_1_009/audio/2018-03-16-H13/audio-2018-03-16-13-58-59.ts">
"#EXTINF:10.005333,">
"/RTS_1_009/audio/2018-03-16-H13/audio-2018-03-16-13-59-09.ts">
"#EXTINF:9.984000,">
"/RTS_1_009/audio/2018-03-16-H13/audio-2018-03-16-13-59-19.ts">
};int main()
{
std::regex regExpression( "(#EXTINF:)(\\d+.\\d+)*" );
std::smatch regExMatch;
const std::string str( PM3U );
bool b = std::regex_match( str.begin(), str.end(), regExMatch, regExpression );
返回 0;
}
如果出现以下情况,则可以修复您的正则表达式
- 将后视转换为消费模式
- 如果将
^
替换为(?:^|n)
以匹配行首,而不仅仅是字符串的开头 - 如果您使用
std::sregex_iterator
匹配多个匹配项,而不是仅匹配整个字符串std::regex_match
(即模式必须匹配整个字符串) - 如果在
EXTINF
之前添加#
,因为预期的匹配项以#EXTINF
开头。
用
const std::regex rx(R"((?:^|n)#EXTINF:(d+.d+),[rn]+(.*))");
std::string test = "#EXTM3Un#EXT-X-VERSION:3n#EXT-X-MEDIA-SEQUENCE:153741n#EXT-X-ALLOW-CACHE:NOn#EXT-X-TARGETDURATION:11n#EXTINF:10.005333,n/RTS_1_009/audio/2018-03-16-H13/audio-2018-03-16-13-58-29.tsn#EXTINF:9.984000,n/RTS_1_009/audio/2018-03-16-H13/audio-2018-03-16-13-58-39.tsn#EXTINF:10.005333,n/RTS_1_009/audio/2018-03-16-H13/audio-2018-03-16-13-58-49.tsn#EXTINF:10.005333,n/RTS_1_009/audio/2018-03-16-H13/audio-2018-03-16-13-58-59.tsn#EXTINF:10.005333,n/RTS_1_009/audio/2018-03-16-H13/audio-2018-03-16-13-59-09.tsn#EXTINF:9.984000,n/RTS_1_009/audio/2018-03-16-H13/audio-2018-03-16-13-59-19.ts";
for(std::sregex_iterator i = std::sregex_iterator(test.begin(), test.end(), rx);
i != std::sregex_iterator();
++i)
{
std::smatch m = *i;
std::cout << "Part 1:" << m[1].str() << "nPart 2:" << m[2].str() << std::endl;
}
正则表达式是
(?:^|n)#EXTINF:(d+.d+),[rn]+(.*)
在线查看此正则表达式演示。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- 激励'inline'说明符的真实世界示例?
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 为什么这个正则表达式在 STL 世界中是错误的?
- v8 你好世界示例链接错误
- 尝试运行SFML你好世界代码,我得到和错误
- AT&T内联C++你好世界错误
- 使用TryCatch时v8 hello世界中的分段错误
- C++错误 C2664:无法将"mw::世界"转换为"mw::世界"
- GTKmm 你好世界编译错误
- 预链接错误:预链接交叉:简单的你好世界示例