【问题标题】:Java Regex: Grouping is not rightJava 正则表达式:分组不正确
【发布时间】:2017-09-25 01:43:37
【问题描述】:

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

正则表达式应按“;”对输入进行分组并且每个组应该是一个键值对,但是我的正则表达式组输入错误,我的正则表达式的问题在哪里?

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

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

有效示例:

评估:tag=val;tag2=

评估:tag=val;tag2=val2

评估:标签=

评估:tag=;tag2=

无效示例:

评估:tag=;tag2=;

评估:tag;tag2=;

评估:tag=tag2=

【问题讨论】:

  • 你忘了问问题。
  • @shmosel 你是对的!
  • Eval:tag=;tag2=
  • 顺便说一句,你可以用str.matches("^(Eval:)+((.+?)=(([^;]*$)))+")替换整个方法
  • 您正在寻找的正则表达式非常复杂。你确定 rfc6265 还没有 Java 库来处理这个问题吗?

标签: java regex


【解决方案1】:

这行得通:

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

这与您的尝试基本相同,但在末尾对 ; 进行了否定的后视以阻止尾随分号。

  • 标题 Eval:
  • 标记= ([^=;]+)=
  • 可选值 ([^=;]*)
  • 分号分隔的标签=值列表 ((([^=;]+)=([^=;]*));?)+
  • 不能以分号结尾 (?&lt;!;)$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 2015-12-03
    • 1970-01-01
    • 2015-12-29
    • 2012-01-23
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多