Java Regex:分组是不对的

时间:2017-09-25 01:43:37

标签: java regex

我想检查字符串的有效性,然后尝试使用正则表达式将其拆分。

正则表达式应将输入分组为";"并且每个组都应该是一个键值对,但我的正则表达式组输入错误,我的正则表达式问题在哪里?

这是我使用正则表达式的函数:

    public static boolean verify(String str) {
    String pattern = "^(Eval:)+((.+?)=(([^;]*$)))+";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(str);
    if(m.matches()){
        return true;
    }else{
        return false;
    }
}

有效示例:

评估:标签= VAL; TAG2 =

评估:标签= VAL; TAG2 = val2的

评估:标签=

评估:标签=; TAG2 =

示例无效:

评估:标签=; TAG2 =;

评估:标签; TAG2 =;

评估:标签= TAG2 =

1 个答案:

答案 0 :(得分:1)

这有效:

^Eval:((([^=;]+)=([^=;]*));?)+(?<!;)$

它与您的尝试基本相同,但最后使用;的负面后视来阻止后续分号。

  • 标题 Eval:
  • 代码= ([^=;]+)=
  • 可选值 ([^=;]*)
  • 半冒号分隔标记=值列表 ((([^=;]+)=([^=;]*));?)+
  • 不能以分号结尾 (?<!;)$