Pattern[] a =new Pattern[2];
a[0] = Pattern.compile("[$£€]?\\s*\\d*[\\.]?[pP]?\\d*\\d");
a[1] = Pattern.compile("Rs[.]?\\s*[\\d,]*[.]?\\d*\\d");
例:Rs.150
によって検出されa[1]
、150
によって検出されa[0]
ます。そのような交差点を削除して、によってのみ検出する方法はa[1]
ありa[0]
ますか?
初期テストを使用して式を切り替えます。この最初のテストがどれだけ速くてスマートかは、あなた次第です。
この場合、次のようなことができます。
if (input.startsWith("Rs.") && a[1].matcher(input).matches()) {
return true;
}
テストを行うメソッドの前に配置します。
もちろん、最も一般的な正規表現を配列の前に置くだけでも効果があります。
否定的な先読みを使用してa[1]
rs.150
フォーマットを一致させ、同時にフォーマットを防止しa[0]
150
ます。
ジェネリック式:(?! the a[0] regex goes here ) followed by the a[1] expression
基本的な正規表現ステートメント:(?![$£€]?\s*\d*[\.]?[pP]?\d*\d)Rs[.]?\s*[\d,]*[.]?\d*\d
Java用にエスケープ:(?![$£€]?\\s*\\d*[\\.]?[pP]?\\d*\\d)Rs[.]?\\s*[\\d,]*[.]?\\d*\\d