-1

つまり、単語のリストを取得し、少なくともすべての単語 (またはそれ以上) に一致する単純な正規表現を作成したいと考えています。

そのためのアルゴリズムが必要です。つまり、そのアルゴリズムの入力は単語のリストであり、出力は正規表現です。明らかに、いくつかの制限があります。同様に、正規表現は、無限の量の単語に一致する必要がある場合、常により多くの単語に一致し、有限数の単語のみを指定します。または、入力のよりコンパクトな表現が必要になります。または、入力として正規表現と追加の単語のリストを与えることも考えており、それらすべてに一致する正規表現を取得したいと考えています (さらに多くの場合もあります)。いずれにせよ、できるだけ単純な正規表現の構築を試みる必要があります。

それを行うことができるテクニックは何ですか?


かなり誤解していました。正規表現の背後にある一般原則を知っています。私はそれが何であるかを知っています。ほとんどの場合、ある言語の正規表現を手で簡単に思いつくことができます。しかし、私はそれを行うアルゴリズムを探しています。


再び少し異なる定式化:

L を正規言語とする。M_n を n 個の要素を持つ L の有限サブセットとします。M_n を M_(n+1) のサブセットとします。

有限の単語セットを取得して正規表現を出力するアルゴリズム LRE が必要です。そして、私はプロパティを持ちたい:

lim_n->無限 | diff( LRE(M_n), L ) | = 0

4

6 に答える 6

2

一般原則については、次の Web サイトを参照してください: http://www.regular-expressions.info/

などの単語のリストしかない場合、これらのいずれかに一致dog, cat, cow, mouseする最も単純な正規表現は次のようになります。ただし、、などdog|cat|cow|mouseにも一致することに注意してください。大文字と小文字を区別するマッチングを行っているかどうか。あなたの問題についてより詳細な情報が与えられれば、より良いパターンを与えることができます。doggonescatologicalDOGGONECOWPATTY

正規表現テスト ツールを入手することもお勧めします。私は Expresso が好きです。.NET パターンに適しています。正規表現の機能はプラットフォームによって異なる場合があるため、ツールがプラットフォームをサポートしていることを確認してください。

于 2010-12-10T16:45:18.173 に答える
1

この問題は、過去 10 年間にわたって検討されてきました。DFA の学習をグーグルで検索し、いくつかの論文をダウンロードして、最先端の技術を理解することをお勧めします。

DFA で正規表現を生成すると、簡単です。問題を回避するために、@FrustratedWithDesign は、最小量のノードで DFA を生成するなどのいくつかの条件について言及しています。これは、機械学習の観点からは、最も単純な仮説に対して正則化条件を設定することに似ています。

于 2010-12-21T17:06:58.843 に答える
0

一致させたい個別の単語のリストがある場合、正規表現が最も得意とするものを一致させているようには思えません。

FrustratedWithFormsDesignerが指摘したように、最悪の場合、正規表現はリスト内の項目にマップされます。一般的な接頭辞を見つけることができるのが最善のケースです。また、正規表現の構築を自動化するのであれば、なぜ正規表現に煩わされるのでしょうか? ユースケースは何ですか?

ただし、リストが些細なサイズを超えている場合は、おそらくループする方がよいでしょう。

于 2010-12-10T16:50:52.550 に答える
0

http://www.regular-expressions.infoは、正規表現リファレンスの素晴らしいサイトです。

複雑な正規表現を作成するときは、通常 Expresso を使用します。正規表現を構築するのに役立つ無料アプリです。すべてのパーツが何をしているかを簡単に確認できるように、それらをツリー ビューに分割します。 http://www.ultrapico.com/Expresso.htm .NET 言語で動作するように作られていますが、さまざまな言語で利用できるこのようなツールがたくさんあります。

正規表現を作成するには、通常、許容値から始めて、文字を正規表現構文に置き換えます。

たとえば、URL を一致させようとしている場合は、

http://www.mydomain.com

次に、エスケープする必要があるものはすべてエスケープします

http://www\.mydomain\.com

それから私は文字を置き換え始めます

http://www\.\w+\.\w+\.\w+

明らかに、この表現にはもう少し作業が必要ですが、アイデアは得られます

于 2010-12-10T17:51:33.947 に答える
0

Perl 正規表現のサイトは次のとおりです。

http://perldoc.perl.org/perlre.html
于 2010-12-10T18:50:10.033 に答える
0

このサイトを使用して基本を学び、ライブ テストにrubularを使用してください。

于 2010-12-10T16:46:13.453 に答える