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)
我做错了什么?
答案 0 :(得分:0)
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-,:]*)(\\))(\\)))?(;)?";
希望这有帮助。