仅在RegEx中的括号内匹配

时间:2012-12-01 19:53:51

标签: java regex pattern-matching assert

我正在挨打以建立一个正则表达式。

匹配规则:

  • 必须包含EN字符串
  • 字符串必须在括号之间
  • 在起始括号中,必须有一个!
  • 字符串可以在perentheses内的任何地方
  • 如果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了解甚少,所以我最终进入了圈子而没有到达任何地方。 有人能帮助我吗?

2 个答案:

答案 0 :(得分:2)

这应符合您的要求(我已经测试过你的测试用例):

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

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

答案 1 :(得分:0)

这是你的正则表达式DEMO

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

注意:不会搜索java。