正则表达式查询问题

时间:2014-02-11 09:23:26

标签: java regex

String filter = "startDate:gt(2014-07-31);(status:eq(A)||status:eq(V));endDate:gt(2014-07-31)";

String REGEX_MARKETOFFER_FILTER = "(\\(+){1}([A-Za-z]+):([A-Za-z]+)(\\(+)([a-zA-Z0-9-,:]+)(\\)+)(;|\\|\\|)([A-Za-z]+):([A-Za-z]+)(\\(+)([a-zA-Z0-9-,:]+)(\\)+)";

   Pattern p = Pattern.compile(REGEX_MARKETOFFER_FILTER);
     Matcher m = p.matcher(filter);

        while (m.find()) {
            System.out.println(m.group());
        }

当我运行上面的代码时,我得到以下输出:

(status:eq(A)||status:eq(V))

然而,我期待这个输出:

startDate:gt(2014-07-31)

(status:eq(A)||status:eq(V))

endDate:gt(2014-07-31)

我做错了什么?

2 个答案:

答案 0 :(得分:0)

使用String#split

public static void main(String []args)
{
    String filter = "startDate:gt(2014-07-31);(status:eq(A)||status:eq(V));endDate:gt(2014-07-31)";

    String str[]=filter.split(";");
}

答案 1 :(得分:0)

正如其他人建议的那样使用String#split(";"),但是如果你真的想按照正则表达式的方式来解析所有令牌并获取具体信息,请使用以下内容:

String REGEX_MARKETOFFER_FILTER = "(\\()?([A-Za-z]*):([A-Za-z]*)(\\()([a-zA-Z0-9-,:]*)(\\))((\\|\\|)([A-Za-z]*):([A-Za-z]*)(\\()([a-zA-Z0-9-,:]*)(\\))(\\)))?(;)?";

希望这有帮助。