任意の正規表現を持つ任意の正規表現と一致する(または一致しない)ランダムなテキストシーケンスを生成するにはどうすればよいですか?私は理論と実用両方に興味があります(.NETの文脈でテストを改善するためにこれが必要です)ので、記事や既存の図書館へのリンクが評価されます。与えられた正規表現に一致するランダムシーケンスを生成する
4
A
答えて
3
純粋に理論的な観点から、正規表現は次のように基づいて構築されている合理的な言語、と同等です:
{}
(無言葉で言語)が合理的です。{a}
(1つの単語が1文字の言語)は合理的です。L
およびM
が2つの合理的な言語である場合、それらの和集合(L
またはM
のいずれかの単語)が合理的です。L
とM
は、二つの合理的な言語である場合、その連結LM
は(言葉はM
からL
から単語にワードを付加することによって構築された)にも合理的です。L
が合理的な言語である場合、L*
(言語L
の任意の数の単語を連結して構成される単語)も合理的です。
この建設的なアプローチは、正規表現の認識/照合アプローチを補完し、再帰的表現に一致する単語構築することができます:
make({}) = ""
make({a}) = "a"
make(A|B) = flip-coin ? make(A) : make(B)
make(AB) = make(A) + make(B)
- を
make(A*) = flip-coin ? "" : make(A) + make(A*)
1
すべての正規表現は、状態間の各遷移が1つ以上の文字を消費する有限状態機械で表現できると思います(または、ゼロ文字も有効ですか?Long私はこれを勉強して以来)。
これについては、正規表現を有限状態マシンに変換して変換し、状態から状態に移動して、有効な終了状態になるまでランダムに遷移を選択する方法があります。
もちろん、このメソッドが実際にどのように実行可能であるか、またはそのようなライブラリが存在するかどうかはわかりません。
http://lara.epfl.ch/dokuwiki/equivalence_of_finite_state_machine_and_regular_expression_languages
0
.NETではなく面白いかもしれませんが。見つけたthis implementation in Haskell。著者はCPAN Genexより強力であると主張しています。
1
.NETでは、プロジェクトFareを参照することもできます。それはまさにあなたが描いていることです。ここで
は、それを使用する方法である:
var xeger = new Xeger(pattern);
var match = xeger.Generate();
Regex.IsMatch(match, pattern);
// Prints -> true
あなたはユニットテストを言及しているので、あなたも、あなたがプロパティ(またはフィールド)を飾るどの一度AutoFixtureを使用して検討すること[RegularExpression]と、それが割り当てられます属性正規表現に一致する値。
1
rxrdg - Regular Expression Random Data Generator。 C#で書かれています。
関連する問題
- 1. は、与えられた正規表現
- 2. 正規表現に一致する正規表現
- 3. 正規表現に一致する正規表現
- 4. 最初に一致する正規表現で一致した正規表現を最初に一致する正規表現
- 5. 正規表現に一致するタグ
- 6. 正規表現を除いたフルテキスト行に一致する正規表現
- 7. 正規表現と一致するコードコメント
- 8. 文字列または正規表現のリテラルにない正規表現と一致する正規表現
- 9. 1つの改行に一致する正規表現。正規表現をダブル改行に一致させる
- 10. 正規表現一致
- 11. 正規表現以外のすべてに一致する正規表現
- 12. C#正規表現と一致する文字列を生成するコード
- 13. 与えられた正規表現を認識するDFAの画像を生成
- 14. 正規表現の可能なすべての一致を生成する
- 15. 正規表現での正規表現の一致値
- 16. 正規表現:問題作成のマッチングパターンこれに一致するように正規表現を考え出すいくつかの問題を抱えて
- 17. 一致条件の最後から一致する正規表現
- 18. 最小の文字数を受け入れる正規表現フレーズに一致する正規表現
- 19. 正規表現に一致するすべての文字列を生成するストリームまたは反復子?
- 20. Rubyは、RE条件の置換後に正規表現で競合する一致を与えます
- 21. 正規表現のタイムスタンプが与えられ
- 22. 一致するURLを確認するPHPの正規表現
- 23. 2つの異なるURLに一致する正規表現
- 24. 正規表現は、パイプで区切られた文字列の最後の5つの単語に与えられた単語と一致するように
- 25. 文字列が2回現れるときに一致する正規表現
- 26. 与えられた正規表現とキーが一致するハッシュの要素を取得するにはどうすればよいですか?
- 27. 与えられた状況に正規表現を書く方法
- 28. Java正規表現最長一致
- 29. 1-不一致正規表現
- 30. 複数の正規表現の一致
私はフィッティングした.NETライブラリを認識していませんが、 "xeger"のStackOverflowを検索してみてください。これはあなたにいくつかの指針を与えるかもしれません。 xegerは与えられた正規表現から文字列を生成するためのJavaライブラリです。 –