2

これは奇妙です、私は次のstd :: regex(rx)を持っています

\{\{alternate form of\s*\|(?:\d=)?(.*?)([\|#][^\|}]*)*\}\}

この文字列(str)を指定すると、どのregex_searchがtrueを返しますか

{{alternate form of|abate|nodot=1}} {{qualifier|abbot}}.

しかし、regex_match(str、m、rx)を呼び出すと、マッチセットmは空になります。RegexBuddyでJavaScriptモードを使用すると(VS2012の正規表現サポートに最も近い動作のようです)、一致が正しく検出されます。誰かアイデアがありますか?他のいくつかの文字列には追加のピースを一致させる必要があるため、正規表現は過剰に指定されているように見えます...

4

1 に答える 1

1

regex_searchターゲット文字列の任意の部分に一致します。regex_match文字列全体に一致します。正規表現は、ターゲット文字列の最初の部分「{{alternate form of | abate | nodot=1}}」と一致します。それがregex_search見つかります。これは文字列全体でregex_matchはないため、一致するものが見つかりません。

于 2012-11-14T13:45:57.563 に答える