(もし私がこれに近づいているべきであれば私に間違った方向を教えてください)Javaは入力に対して複数の正規表現パターンをチェックする方法を教えてください。
私は入力と比較したい複数のパターンを持つJavaプログラムを持っています。いずれかのパターンが一致する場合、その値をStringに保存します。私はそれを単一のパターンで動作させることができますが、私は多くを照らし合わせることができるようにしたいと思います。
今、私は入力が一つのパターンと一致するかどうかを確認するためにこれを持っている:入力がTST1234またはabcTST1234たならば、ID =「TST1234」、だから、
Pattern pattern = Pattern.compile("TST\\w{1,}");
Matcher match = pattern.matcher(input);
String ID = match.find()?match.group():null;
を
私は複数のパターンを持つようにしたいです以下のように:
:その後、Pattern pattern = Pattern.compile("TST\\w{1,}");
Pattern pattern = Pattern.compile("TWT\\w{1,}");
...
、その後、コレクションにし、入力に対して各1をご確認ください0
List<Pattern> rxs = new ArrayList<Pattern>();
rxs.add(pattern);
rxs.add(pattern2);
String ID = null;
for (Pattern rx : rxs) {
if (rx.matcher(requestEnt).matches()){
ID = //???
}
}
IDの設定方法がわかりません。私は
ID = rx.matcher(requestEnt).group();
と
ID = rx.matcher(requestEnt).find()?rx.matcher(requestEnt).group():null;
ないこの仕事やどこかのここから行くするの作り方を実際に確認を試みました。どんな助けや提案も感謝しています。ありがとう。
編集:はいパターンは時間とともに変化します。だから、pattenのリストが成長します。
入力の文字列を取得するだけです。つまり、入力がabcTWT123の場合、最初に "TST \ w {1、}"をチェックしてから "TWT \ w {1、}" IDストリングと一致するので "TWT123"に設定されます。第一のパターンが一致したとき
文字列ごとに一致するすべてのパターンをマップに保存しますか?私はあなたの望む最終出力によって少し混乱しています –
あなたの例を考えれば、あなたのパターンを 'Pattern.compile(" T [SW] T \\ w {1、} ");' => match (パターンA | otherB)\\ w {1、} ");' ...良い答えは、どのように多くのパターン、どのように異なっているか、どのように構成可能か動的か...コードを書くときに知られているすべてのパターンがありますか?時間の経過とともに変化しますか? –
はい、パターンは時間とともに変化します。 1つのパターンだけが一致するとすれば、一致の文字列を取得する必要があります。つまり、入力がabcTWT123の場合、最初に "TST \\ w {1、}"をチェックし、 "TWT \\ w {1、}"に移動し、IDストリングと一致するので "TWT123"に設定されます。 – SuperCow