使用Regex从json路径中提取多个令牌

时间:2019-04-09 07:40:17

标签: java regex token

我必须使用正则表达式从需要匹配的文本中提取令牌。示例文本就是这样。

data.orderType.`order.created.time`

现在,我正在使用以下正则表达式对该字符串进行标记。

`(.*?)`|[^.]+

此正则表达式部分标记字符串,并以

给出标记
data,orderType,`order.created.time`

这里的问题是当令牌被反引号也包括在内时。我该如何抛弃反引号并获得以下内容?

data,orderType,order.created.time

1 个答案:

答案 0 :(得分:2)

您已经捕获了反引号之间的部分,如果matcher.group(1)参加了比赛(=匹配),只需抓住它:

Java demo

String s = "data.orderType.`order.created.time`";
String regex = "`([^`]*)`|[^.`]+";
List<String> result = new ArrayList<>();
Matcher m = Pattern.compile(regex).matcher(s);
while (m.find()) {
   if (m.group(1) != null) {
       result.add(m.group(1));
   } else {
       result.add(m.group());
   }
}
System.out.println(result);
// => [data, orderType, order.created.time]

请注意,我还对否定的字符类[^.`]+添加了反引号,因为我认为反引号只能配对。