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
