1

ユーザー入力として文字列を受け取り、文字列の一部から正規表現(regex)を作成できるWebサイトはたくさんあります。

しかし、同じことをするJavaライブラリは見つかりませんでした。文字列と完全に一致する正規表現を生成するJavaライブラリはありますか?

String inputString = "ABC345";
String regularExpression = Something.generateRegEx(inputString);

またはそのようなもの。

注:ユーザーから文字列を取得し、正規表現を生成してから、一部のデータセットでそのパターンを照合して同様のパターンを抽出したいという条件があります。私は小さなユーティリティを作成しましたが、まだそれほど信頼できません。さらに、私はいくつかのよくテストされたライブラリを探しています。

編集 :

txt2re.comにアクセスしてください。同じ機能を実行するJavaライブラリが必要です。

4

4 に答える 4

3

Pattern.quote(String)指定された文字列に正確に一致する (文字列) 正規表現を返します。

于 2012-07-30T14:24:12.087 に答える
2

txt2re.comには、既知の正規表現からのデータベースがあると思います。これは、ツールが日付や電子メール形式の「日付」や「電子メール」などのセマンティクスで回答を拡張するためです。それ以外の場合は、文字列のみを検証し、「正規言語」は検証しない式を提供します。正規言語は正規表現で表現され、有限状態マシンで計算できますが、それらは限定された単語のセットです(すべての有限言語は正規です)。たとえば、次のような単純な言語:

L = { (a^n)(b^n) | n >= 0 } is not regular. (proof with pumping lemma)

L = {ab, aabb, aaabbb,...} (not- regular) 

ただし、入力が無限の単語のセット(自然言語を含む)であると考えると、正規表現ですべてを記述することはできません。言語の正規表現を生成するには、最初に(TYPE-3)文法でそれを記述する必要がありました。

あなたの言語にこのような単語しかない場合:

L = { your.name@example.com }

次に、文字の型をチェックしながら文字を反復処理する基本的なコンパイラを記述できます。疑似:

s = size(input) 
result = ""
for (i = 0; i < s; i++) {
   if input[i] is numeric
      result += "d"
   else if input[i] is word
      result += "w" 
   ...
}
return result
于 2012-07-30T15:06:21.613 に答える
-1

特定の文字列に一致する正規表現を見つけたい場合、これは無数に存在するため意味がありません。

逆に、ユーザーから入力された正規表現から Pattern オブジェクトを作成する場合は、標準 Java API ( java.util.regex.*) を次のように使用します。

Pattern p = Pattern.compile(inputString);
于 2012-07-30T14:20:44.447 に答える