-3

ABCD12345フォームの文字シーケンスと他のフォームの文字シーケンスを一致させる必要がありABCD54321.aaaます。

両方の形式をチェックするコードを作成しましたが、両方の正規表現 ( 用と 用) に一致するABCD12345ため、入力シーケンスに対してのみ正しく機能します。ABCD54321.aaaABCD54321.aaaABCD54321

入力が のときに正規表現の 1 つだけが一致するように正規表現を変更するにはどうすればよいABCD54321.aaaですか

文字シーケンスを照合するために使用しているパターンを示す Java コードのスニペットを次に示します。

String[] patternValues = new String[] { "[Aa.][Bb][Cc][Dd]\\d+\\.+[a-zA-Z]{3}","[Aa.][Bb][Cc][Dd]\\d+"} ;
for(int i = 0 ; i <= (patternValues.length - 1) ; i++) {
    Pattern regexp = Pattern.compile(patternValues[i]);
    ..... 
}
4

3 に答える 3

1

Java を使用していて、2 つの異なる RegEx を順番にチェックしていると仮定すると、 「ABCD12345」のみに一致する(「ABCD54321.aaa」には一致しない) 正規aMatcher.matches()表現に否定先読みを追加できます。 否定先読みです。"[A-Z]{4}[0-9]{5}(?!\\.[a-z]{3})""(?!\\.[a-z]{3})"

2 番目の方法は、正規表現を 1 つだけ (両方に一致するもの) 保持し、一致したテキストを ( を介して) 取得し、(9 または 13 のいずれかである必要がありますaMatcher.group()) から決定することです。aMatcher.group().length()

を使用したい場合aString.matches(aRegEx)は、最初のオプションしかありません。

于 2013-08-12T18:33:53.640 に答える
0

ABCD54321-only 一致には、次の正規表現が必要です。

ABCD54321(?!\.aaa)

それは一致ABCD54321し、その後に が続きません.aaa

大文字と小文字を区別しないようにする場合は、最初にフラグをPattern.compile()使用して準備します。CASE_INSENSITIVE

Pattern.compile("abcd54321(?!\\.aaa)", Pattern.CASE_INSENSITIVE);
于 2013-08-12T18:35:41.387 に答える