c ++ 11正则表达式 - 查找两个斜杠字符之间的所有匹配项

时间:2015-11-09 10:05:02

标签: regex c++11

假设我有一个字符串:String1/String2/String3/String4

我想使用正则表达式查找斜杠字符之间的所有匹配以及最后一个/字符后的所有内容。所以输出将是:String2 , String3 , String4

smatch match_str;
regex re_str("\\/(.*)");

regex_match( s, match_str, re_str );

cout << match_str[1] << endl;
cout << match_str[2] << endl;
cout << match_str[3] << endl;

3 个答案:

答案 0 :(得分:1)

请注意,regex_match需要完整的字符串匹配。此外,.*尽可能多地匹配除换行符之外的0个或多个字符(也就是说,它匹配到给定行的最后一行)。

此外,C ++正则表达式中的/符号不需要转义。

这是一个有效的代码:

#include <string>
#include <iostream>
#include <regex>
using namespace std;

int main() {
    std::regex r("[^/]+");
    std::smatch m;
    std::string s = "String1/String2/String3/String4";

    for(std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r);
                            i != std::sregex_iterator();
                            ++i )
    {
        std::smatch m = *i;
        std::cout << m[0] << '\n';
    }
    return 0;
}

请参阅IDEONE demo

结果:

String1
String2
String3
String4

如果需要指定初始边界,请使用

std::regex rex1("(?:^|/)([^/]+)");

值将在m[1]内,而不是m[0]。请参阅another demo

答案 1 :(得分:0)

你可以使用这个:

\\/([^\\/])*

使用live example

答案 2 :(得分:0)

这是使用字符串迭代器(未经测试)的方法。

std::string strInput = "String1/String2/String3/String4";

std::string::const_iterator start = strInput.begin();
std::string::const_iterator end   = strInput.end();
std::smatch _M;

std::regex Rx( "/([^/]*)" );

while ( regex_search( start, end, _M, Rx ) )
{
    std::string strSubDir = _M[1].str();      // Do something with subdir
    cout << strSubDir.c_str() << endl;        // Debug print subdir
    start = _M[0].second;                     // Advance the start iterator past this match
}

输出:

String2
String3
String4