0

我有一个字符串 resource = "/Music/1" 字符串可以在 "/Music/" 之后采用多个数值。我是正则表达式的新手。我尝试了以下代码

#include <iostream>

#include<boost/regex.hpp>

int main()
{
    std::string resource = "/Music/123";

    const char * pattern = "\\d+";

    boost::regex re(pattern);

    boost::sregex_iterator it(resource.begin(), resource.end(), re);
    boost::sregex_iterator end;

    for( ; it != end; ++it)
    {
        std::cout<< it->str() <<"\n";
    }
    return 0;
}

vickey@tb:~/trash/boost$ g++ idExtraction.cpp  -lboost_regex
vickey@tb:~/trash/boost$ ./a.out 
123

工作正常 。但即使字符串恰好是“/Music23/123”之类的东西,它也会在 123 之前给我一个值 23。当我使用模式“/\d+”时,它会在字符串为 /23/Music/123 时给出结果事件. 我想要做的是提取 "/Music/" 之后的唯一数字。

4

2 回答 2

2

我认为部分问题在于您没有很好地定义(至少对我们而言)您要匹配的内容。我会做一些猜测。也许一个会满足您的需求。

  • 输入字符串末尾的数字。例如“/a/b/ 34 ”。使用正则表达式"\\d+$"
  • 完全是数字的路径元素。例如“/a/b/ 12 /c”或“/a/b/ 34 ”,但不是“/a/b56/d”。使用正则表达式"(?:^|/)(\\d+)(?:/|$)"并获取捕获组 [1]。您可能会使用前瞻和后瞻来做同样的事情,也许使用"(?<=^|/)\\d+(?=/|$)".
于 2012-09-23T03:50:09.473 回答
0

If there will never be anything after the last slash could you just use a regex or string.split() to get everything after the last slash. I'd get you code but I'm on my phone now.

于 2012-09-23T03:00:45.780 回答