2012-02-14 23 views
4

私はPerlモジュールRegexp::Assembleに出くわしました。これは、任意の数の正規表現を取り、それらを個々の正規表現とすべて一致する単一の正規表現にアセンブルします。Regexp :: AssembleのJavaに相当するものは何ですか?

Java用の類似のライブラリはありますか?それぞれの入力ごとに正規表現を組み込むのは非常に面倒です。

答えて

2

regexpはあなたが望むものに類似した例に...リンクポイントをあなたを助けるかもしれない、私はそれが正規表現の辞書で仕事をしたりしませんかどうかわからないです。また、著者に電子メールを送ってもらいたいと思うかもしれません。私は彼があなたの正確なユースケースの解決策を見つけ出すのを手伝ってくれると確信しています。

+0

ありがとう。私はリンクを確認させてください – Allwyn

+0

あなたがこの問題を解決する方法を教えていただけたら幸いです。例のString []の一部として正規表現を持つことができますか? – Sap

+0

これは私がやったことです。私はすべての正規表現を別々のファイルに書きました。私が共通のregexpを生成する必要があるときは、ファイルからそれらの正規表現をString配列に読み込み、RegExpUtils.convertListToRegexp(true、fileContent)メソッドに渡します。最適化された正規表現が返されます。 – Allwyn

0

これは単なる正規表現の問題だと思います。例えば正規表現[abc]+[xyz]+がある場合は、(regex1|regex2)と組み合わせることができます。([abc]+|[xyz]+)です。より多くの正規表現を追加することは、|句を追加するだけです。だから、あなたは本当にループのように 'ジェネレータ'を必要としません。たとえば:

import org.apache.commons.lang.StringUtils; 

List<String> regexlist = new ArrayList<String>(); 
BufferedReader br = new BufferedReader(new FileReader(file)); 
String line = null; 
while ((line = br.readLine()) != null) { 
    regexlist.add(line); 
} 

String regex = "(?:" + StringUtils.join(regexlist, "|") + ")"; 
+1

ありがとうございます。しかし、私はORについてだけでなく、恐れている。 reg-exの例として、Regex :: Assemblyモジュールの出力(?^:(?:[abc] + | [xyz] +)を参照してください。私は単純にORを実行すると、パフォーマンスが低下する可能性があると思います。 – Allwyn

+0

'Regex :: Assembly'は明らかに異なる出力を生成します。含まれている正規表現の分析を行います。最初に、単純なソリューションをテストし、パフォーマンスの問題がある場合にのみ、より複雑なものを試してください。あなたの例に関しては、非捕捉のグループが良いです。私は私の答えを変更しました。 – beerbajay

+0

ありがとうございます。それをさせてください – Allwyn

0

私の場合、Regexp :: Assembleを使ってスクリプトを書いています。これは、必要なREのセットを生成し、ファイルに書き込んで、メインのJavaアプリケーションが読み込むようにします。君は ?

関連する問題