首页 > 解决方案 > 使用正则表达式从 json 路径中提取多个标记

问题描述

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

data.orderType.`order.created.time`

现在我正在使用以下正则表达式来标记这个字符串。

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

此正则表达式对字符串进行部分标记,并将标记作为

data,orderType,`order.created.time`

这里的问题是当令牌被取走时,反引号也被包括在内。我怎样才能转储反引号并得到以下内容?

data,orderType,order.created.time

标签: javaregextoken

解决方案


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

Java演示

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]

注意我还在否定字符类中添加了一个反引号,[^.`]+因为我假设反引号只能成对出现。


推荐阅读