文字クラスで後方参照を使用できないことは認識していますが、この機能が必要です。これを達成するために使用できる代替の有効な正規表現があるかどうか疑問に思っています。
前提条件: Visual Studio 2013 を使用しています。その環境 (つまり、std::regex) 内で動作する必要があります。
簡単な例として、私が実行したいのは、大文字のローマ字アルファベットのみ (つまり AZ) の単語リストでの検索です。たとえば、次のような仮説的な表現です。
"^(.)([A-\1])([\2-Z])$"
これは理想的には、2 番目の文字が語彙的に 1 番目の文字以下であり、3 番目の文字が語彙的に 2 番目の文字以上である 3 文字の単語の一致を返します。一致の例には、「CAT」と「EEL」が含まれますが、「COW」と「PIG」は含まれません。
では、これを達成できるやや単純な正規表現 (26×N 指数代替条件を除く) はありますか? それとも、これを行うために独自のコードを作成する必要がありますか?
補遺:単純化されたケースの代替の有効な正規表現を受け取っていないので、そのような検索を実行するための独自のコードを書く必要があるという点で、私の質問に答えると思います。
現実の問題を理解するために、ここで説明します。
http://joeslater.orgfree.com/ZigWord/tutorial.html
問題を理解するにはチュートリアルで十分でしょうが、いくつかのパズルが用意されていますので、ぜひ試してみてください。それらはすべて手作業で生成されました。選択する単語のリストを使用して、このようなパズルを生成するプログラムが必要です。
本当の問題は、パズルのサイズが 9×9 や 11×11 のグリッドのように大きくなり、大量の単語リスト (数百または数千) がある場合に発生します。パズルが構築されるにつれて、各単語が埋められていない場所に収まるようにする力ずくの方法は、容認できない解決策です。 11×11 パズル (パズルは生成されませんでした)。
そのため、パズルが構築され、パズルに収まる可能性のある単語を除外するために、正規表現を使用したいと考えていました。現時点では、この検索を実行するには独自のコードを作成する必要があると思いますが、そうでない場合は教えてください。