0

文字列リソース="/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

問題の一部は、あなたが何を一致させようとしているのかを(少なくとも私たちにとっては)十分に定義していないことだと思います。私はいくつかの推測をするつもりです。おそらく1つはあなたのニーズを満たすでしょう。

  • 入力文字列の最後にある数字。たとえば、「/ a / b/ 34」。正規表現を使用し"\\d+$"ます。
  • 完全に数値のパス要素。たとえば、「/ a / b / 12 /c」または「/a/ b / 34」ですが、「/ a / b56/d」は使用できません。正規表現を使用"(?:^|/)(\\d+)(?:/|$)"して、キャプチャされたグループを取得します[1]。先読みと後読みで同じことを行う場合があります。おそらく。を使用し"(?<=^|/)\\d+(?=/|$)"ます。
于 2012-09-23T03:50:09.473 に答える
0

最後のスラッシュの後に何も表示されない場合は、正規表現またはstring.split()を使用して、最後のスラッシュの後にすべてを取得できます。私はあなたにコードを教えてもらいますが、私は今私の電話にいます。

于 2012-09-23T03:00:45.780 に答える