-1

で区切られた 1 行に 4 つの単語があり\nます。例: "aa\ne'sboob\ng-coo\nood\nff" (注: 単語には英字だけでなく、'\n' が含まれていない場合もあります!)

単語レベルで部分一致を実行したい: たとえば、部分一致で"oo"は が得られます"boob", "coo", and "ood"

私は pattern: から始めました。"^(.*?oo.*?)$"これにより、 が得られます"aa\ne'sboob", "g-coo", and "ood"。明らか"aa\ne'sboob"に間違っています。

Boost Regexを使用しています:

#include <iostream>
#include <string>
#include <boost/regex.hpp>

int main()
{    
    std::vector<std::string> v; 
    std::string text = "aa\ne'sboob\ng-coo\nood\nff";

    const char* pattern = "^(.*?oo.*?)$";
    boost::regex reg(pattern);
        boost::sregex_iterator it(text.begin(), text.end(), reg);
        boost::sregex_iterator end;
    std::string tmp;
        for (; it != end; ++it) {
        tmp = it->str();
        v.push_back(it->str());
            std::cout << tmp << std::endl;
        }
    std::cout << "total find: " << v.size() << std::endl;
    return 0;
}

これについて私を助けてもらえますか?

編集:私は1つのパターンワークを持っていますが、私はそれを理解していません. 解説もお願いします。注: Boost 正規表現を適切に使用するには、おそらく助けが必要です。

編集: 単語には英語の文字だけでなく含まれている可能性があることを明確にします。また、@just-somebody が提案したようにソースを更新します。

どうもありがとう

4

3 に答える 3

0

.*必要なときに正規表現で使用しないでください[a-z]*

于 2013-10-15T11:59:53.317 に答える
0

私はこのパターンがうまくいきます:

"^([^\\n.]*?oo.*?)$"

しかし、私はよりエレガントなソリューションを期待しています。

ありがとうございました。

于 2013-10-15T12:15:27.663 に答える
0

\b\w*oo\w*\b助けるべきです。 Perl 正規表現構文.

OPが答えを主張しているので編集...

投稿されたコードにこれらの変更を加えました:

  • 追加した#include <boost/regex.hpp>
  • に機能を変更しましたint main(void)
  • にパターンを変更しましたconst char* pattern = "\\b\\w*oo\\w*\\b";

コンパイル、実行、取得:

boob
coo
ood
total find: 3
于 2013-10-15T13:19:14.260 に答える