0


0

次のコードから、対応する入力からこの出力を取得することを期待しています。

入力:FOO出力:マッチ入力:FOOBAR出力:マッチ入力:BAR出力:マッチなし入力:fOOBar出力:マッチなし

しかし、なぜそれが入力FOOBARに "No Match"を与えるのですか?

#include #include #include #include #include using namespace std;ネームスペースブーストを使用する。

int main(int arg_count、char * arg_vec []){if(arg_count!= 2){cerr << "1つの引数が必要です。 EXIT_FAILUREを返します。 }

文字列InputString = arg_vec [1]; toMatch = "FOO"の文字列。

const正規表現e(toMatch); if(regex_match(InputString、e、match_partial)){cout << "Match" << endl; } else {cout << "一致しない" << endl; }

0を返します。 }

更新:

最後にそれは以下のアプローチで動作します。

#include #include #include #include #include using namespace std;ネームスペースブーストを使用する。

bool testSearchBool(const boost :: regex

int main(int arg_count、char * arg_vec []){if(arg_count!= 2){cerr << "1つの引数が必要です" << endl; EXIT_FAILUREを返します。 }

文字列InputString = arg_vec [1]; toMatch = "FOO *";

静的定数正規表現e(toMatch); if(testSearchBool(e、InputString)){cout << "MATCH" << endl; } else {cout << "NOMATCH" << endl; }

0を返します。 }

2 Answer


1


`+ regex_match `の代わりに ` regex_search +`を使用します。


0


正規表現では、サブストリング "FOO"の最初と最後の文字を考慮する必要があります。 よくわかりませんが、 "FOO *"がうまくいくかもしれません

部分文字列がテキスト入力の末尾ではなく先頭で見つかった場合にのみ、match_partialはtrueを返します。

_ 部分一致とは、テキスト入力の最後で1つ以上の文字に一致したものの、すべての正規表現に一致しなかったものです(ただし、より多くの入力があった場合は一致した可能性があります) _

そのため、 "FOO"と一致するFOOBARはfalseを返します。 他の答えが示唆するように、regex.searchを使用することはあなたがより効果的に部分文字列を検索することを可能にするでしょう。