我必须使用正则表达式从需要匹配的文本中提取令牌。示例文本就是这样。
data.orderType.`order.created.time`
现在,我正在使用以下正则表达式对该字符串进行标记。
`(.*?)`|[^.]+
此正则表达式将字符串部分标记化,并给出标记为
data,orderType,`order.created.time`
这里的问题是当令牌被反引号也包括在内时。我该如何抛弃反引号并获得以下内容?
data,orderType,order.created.time
最佳答案
您已经捕获了反引号之间的部分,如果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]
注意我还对否定的字符类添加了反引号,因为我认为反引号只能配对。