2

我正在努力构建一个正则表达式。

匹配规则:

  • 必须包含 EN 字符串
  • 字符串必须在括号之间
  • 在开始的括号中,必须有一个!
  • 字符串可以在圆括号内的任何位置
  • 如果 EN 字符串存在于括号外,则不能匹配

与 RegEx 匹配的字符串可以具有以下格式,以及预期的相应答案:

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));
}

我尝试了各种方法,但我对 RegEx 知之甚少,所以我最终陷入了困境,无处可去。有人能帮我吗?

4

2 回答 2

2

这应该符合您的要求(我已经用您的测试用例对其进行了测试):

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

说明:任何字符 (.*) 的前零个或多个。然后是'!(',然后是零个或多个任何字符,然后是'EN',然后是零个或多个任何字符,然后是右括号,然后是零个或多个任何字符。

于 2012-12-01T19:56:42.693 回答
0

这是您的正则表达式演示

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

注意:不会为 java 转义。

于 2012-12-01T20:10:38.913 回答