2013-07-08 9 views
7

正規表現を使用してユーザー入力を検証します。これで正規表現を設定できるようになりました。それで、確実な入力をどのようにフォーマットしなければならないかの例を見るのに役立ちます。C#正規表現と一致する文字列を生成するコード

任意の正規表現に一致する文字列を生成することはできますか?どこかで使用できる実装さえありますか?

更新日: ライセンスのため、私はREXを使用できません。他の可能性はありますか?

+1

私は探してお勧めします:http://research.microsoft.com/en-us/projects/rex/、彼らはそのようなことを行います。それがあなたのために働くかどうか私に知らせてください。 –

+1

このウェブサイトをチェックしてください:http://debuggex.com。あなたが望む正規表現を入力し、 'Some random matches'セクションを見てください。正規表現が複雑になり始めるときの命題に驚くかもしれません。 – Stephan

+0

'。*'によって何が生成されるか? – Toto

答えて

6

をレックスがこれを行うことができ、このアプリを使ってみてください:) Java用

http://research.microsoft.com/en-us/projects/rex/

を、それは非常に多くの正規表現マッチジェネレータがある https://code.google.com/p/xeger/

です:)

そして、この: https://github.com/moodmosaic/Fare

それはコメントで指定され、レックス・ツールは、トリックを行いますC#の

+0

Rexはクールですが、ライセンスのために私はそれを使用することはできません。 – schoetbi

+1

@schoetbi私はこれを見つけましたhttps://github.com/moodmosaic/FeedはC#でxegerのラッパーです。これを試してください:) – wudzik

+0

運賃はXegerポートが含まれているように見えます。私は試してみます – schoetbi

0

ほぼ確実ではなく、

通常、正規表現は、文字列が指定された形式と一致するかどうかを確認するために使用します。あなたのフォーマットが正規表現を書いているのに十分なはずであることが分かっているならば、あなた自身のテストデータを簡単に生成することはできません。

[編集 - 周囲にはいくつかの例があります。しかし、これはあなたの正規表現が正しいことをテストするためには、すでにテストデータを書かなければならないという事実を無視しています。だから、あなたはすでにあなたの文字列を持っている必要があります。]

+0

私はそれが正規表現の各トークンの有効な文字の例を選択し、例の文字列に追加ルールをチェックする代わりに.netのregexparserのようなクラスを持つことができるはずだと思う。 – schoetbi

+0

あなたが記述した状況では、データを検証するための式を提供しています。だから、確かにあなたはすでにデータを知っています、最初に式を書いたのですか? –

+0

ユーザーは一致する文字列をまだ入力していません。私は彼に有効な例を提示するのが好きです。 – schoetbi

1

でxegerラッパーだ - あなたのパターンに一致する文字列を作成するためにレックスを使用し

を次のように

rex.exeを実行します。

rex.exe "your_regex_pattern_here" /k:your_required_examples_num_here 

このについての詳細は:Rex Guide

2

いくつかのソリューション:

(1)正規表現が(ユーザーではなく)あなたによって書かれていてめったに変更されない場合、なぜプログラムで何かを作成するのですか?あなたは手でいくつかの素晴らしい例を作成することができます。

(2)既製のソリューションを使用してください。 (他の回答を参照)

(3)Rejection samplingすべてのランダム生成問題に対するスレッジハンマー解法:ランダムな文字列を作成し、それが正規表現と一致するかどうかを確認します。そうでない場合は、もう一度お試しください。正規表現が非常に特殊な場合、このソリューションはひどいパフォーマンスを示します。

(4)正規表現を文字列構造ツリーに変換するパーサを実装します。以下のノードのすべてのノードには、特定の規則に従うCreateRandomStringメソッドがあります。ランダムな文字列を作成すると、そのメソッドをルートノードとして呼び出すことを意味します。

連結:すべての子サブツリーを走査し、結果を順番に連結します。

ランダム選択:ランダムな子サブツリーを選択してそれをトラバースします。結果を返します。

:aとbの間に乱数nを作成します。サブツリーをn回たどり、結果を連結します。

:定数文字列を返します。

パーサの作成は難しい部分です:特にネストされた構造です。 (私はregexesに似た構文を書いています)

+0

.netフレームワークのregexパーサは純粋に管理されているので、私は4番くらいです。しかし、その後、私はかなり良い運賃を見つけました。正規表現は変更され、それらのいくつかがありますが、エンドユーザではなくユーザが設定することもできます;) – schoetbi

関連する問題