任意の正規表現を持つ任意の正規表現と一致する(または一致しない)ランダムなテキストシーケンスを生成するにはどうすればよいですか?私は理論と実用両方に興味があります(.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. 正規表現に一致する正規表現(CTLDループ)
- 4. 正規表現に一致する正規表現
- 5. 正規表現に一致する正規表現
- 6. 正規表現のディレクトリパスに一致する正規表現
- 7. 最初に一致する正規表現で一致した正規表現を最初に一致する正規表現
- 8. 与えられた言葉のように一致するための正規表現
- 9. 与えられた正規表現を満たすサンプルテキストを自動的に生成するには?
- 10. 正規表現と一致する正規表現2.3
- 11. 正規表現と一致する正規表現
- 12. 正規表現を除いたフルテキスト行に一致する正規表現
- 13. 正規表現に一致するURL
- 14. 正規表現に一致するタグ
- 15. 正規表現に一致するグループ
- 16. グループに一致する正規表現
- 17. 与えられた正規表現パターンと一致しない文字をエスケープする
- 18. 正規表現を使って与えられた範囲で結果を一致させるには?
- 19. 正規表現を一致させる正規表現
- 20. 正規表現のURLを一致させる正規表現
- 21. これらの条件に一致する正規表現
- 22. 文字列または正規表現のリテラルにない正規表現と一致する正規表現
- 23. オプションパラメータと一致する正規表現
- 24. 一致する正規表現は
- 25. 正規表現と一致するコードコメント
- 26. URLプレースホルダ一致する正規表現
- 27. 一致する正規表現パターン{{.... ....}}
- 28. 1つの改行に一致する正規表現。正規表現をダブル改行に一致させる
- 29. 正規表現のいずれかと一致する正規表現
- 30. 正規表現一致
私はフィッティングした.NETライブラリを認識していませんが、 "xeger"のStackOverflowを検索してみてください。これはあなたにいくつかの指針を与えるかもしれません。 xegerは与えられた正規表現から文字列を生成するためのJavaライブラリです。 –