2

正規表現を構築するのに苦労しています。

マッチングのルール:

  • EN文字列を含める必要があります
  • 文字列は括弧で囲まれている必要があります
  • 開始括弧には ! が必要です。
  • 文字列は括弧内のどこにでも置くことができます
  • EN 文字列が括弧の外側に存在する場合、一致してはなりません

正規表現に一致する文字列は、予想されるそれぞれの回答とともに、次の形式を持つことができます。

public void testRegexToMatchContextToIgnoreFromString() {
    String regex = "\\([^\\(].?[EN+].?\\)";
    assertTrue("!(EN)CLIENT".matches(regex));
    assertTrue("!(EN,PR)CLIENT".matches(regex));
    assertTrue("!(PR,EN)CLIENT".matches(regex));

    assertFalse("!(PR)CLIENT".matches(regex));
    assertFalse("!(CO,PR)CLIENT".matches(regex));
}

いろいろやってみましたが、正規表現がよくわからず、ぐるぐるまわってしまいました。誰かが私を助けることができますか?

4

2 に答える 2

2

これはあなたの要件と一致するはずです(私はあなたのテストケースでテストしました):

String regex = ".*!\\(.*EN.*\\).*";

説明: 最初の 0 個以上の任意の文字 (.*)。次に '!('、0 個以上の任意の文字、'EN'、0 個以上の任意の文字、右括弧、0 個以上の任意の文字。

于 2012-12-01T19:56:42.693 に答える
0

これが正規表現のデモです

!\([^\(\)]*EN[^\(\)]*\)

注: Java ではスケープされません。

于 2012-12-01T20:10:38.913 に答える