Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在REGEX';或';(|)条件_Java_Json_Regex - Fatal编程技术网

Java 如何在REGEX';或';(|)条件

Java 如何在REGEX';或';(|)条件,java,json,regex,Java,Json,Regex,我知道有类似的问题,但似乎没有一个符合我的要求。我对regex还不熟悉,还在学习。感谢您对以下问题的帮助。 我有以下输入json数据。PS:为了更好地理解我的问题,我简化了实际数据。 一, { “名称”:“abc”, “答复”:{ “回发”:“唯一-a651-95e4834b63cc”, “文本”:“测试” }, “备注”:“获取关键字” } { “名称”:“abc”, “答复”:{ “回发”:“a651-95e4834b63cc”, “文本”:“测试” }, “备注”:“获取关键字” }

我知道有类似的问题,但似乎没有一个符合我的要求。我对regex还不熟悉,还在学习。感谢您对以下问题的帮助。
我有以下输入json数据。PS:为了更好地理解我的问题,我简化了实际数据。
一,

{
“名称”:“abc”,
“答复”:{
“回发”:“唯一-a651-95e4834b63cc”,
“文本”:“测试”
},
“备注”:“获取关键字”
}
  • {
    “名称”:“abc”,
    “答复”:{
    “回发”:“a651-95e4834b63cc”,
    “文本”:“测试”
    },
    “备注”:“获取关键字”
    }
    
    正则表达式

    我想知道这些关键词中哪一个是匹配的。在这里,如果存在“唯一”字段,它会变得更加棘手。它应该停止在那里,不再匹配任何其他字段。
    我正在使用以下java代码

    pattern = Pattern.compile("(UNIQUE)|(\"(response|someothedata|otherdata|somedata)\")")  
    Matcher matcher = pattern.matcher(message);  
    if(matcher.find()){
      match = matcher.group();
    }  
    
    对于两个输入json,matcher.group()返回“response”

    我希望达到以下目标:

    1。group()返回“UNIQUE”
    两个人。仅当“唯一”不存在时才返回“响应”

    注意:一旦我得到匹配的单词(match),就没有什么动作可以做了,所以这是不能妥协的

    有谁能帮我确定“唯一”关键字的优先级吗?

    你可以使用

    Pattern pattern = Pattern.compile(".*(UNIQUE|\"(?:response|someothedata|otherdata|somedata)\")");
    Matcher matcher = pattern.matcher(message);  
    if(matcher.find()){
      match = matcher.group(1).replaceAll("^\"|\"$", "");
    }  
    
    看。详情:

    • *
      -尽可能多的零个或多个字符,而不是换行符(这会将正则表达式索引移动到字符串/行的末尾)
    • (UNIQUE |\”(?:response | somethedata | otherdata | sometdata)\”
      -第1组:
      UNIQUE
      ,后跟
      response
      somethedata
      otherdata
      或者
      somedata
      然后

    您正在匹配模式的单个匹配项,这意味着匹配项是第一个匹配项还是最后一个匹配项对您来说并不重要。这就是为什么在一个捕获组中添加
    *
    和分组
    唯一的
    “(?:response | somethodata | otherdata | sometdata)”
    会起作用。唯一的“问题”是
    响应
    ,等等。单词的两端都带有双引号,因此您可以使用
    .replaceAll(“^\”| \“$”,“”)安全地删除它们。

    感谢您理解需求并给出解决方案。但有一个问题,这只在输入json为单行时有效。我已经更新了问题,请退房。ps:对不起,我应该正确地提到输入数据。@SavinayaShetty使用
    “(?s)。*(唯一的|\”(?:response | someothedata | otherdata | somedata)\”
    Pattern pattern = Pattern.compile(".*(UNIQUE|\"(?:response|someothedata|otherdata|somedata)\")");
    Matcher matcher = pattern.matcher(message);  
    if(matcher.find()){
      match = matcher.group(1).replaceAll("^\"|\"$", "");
    }