繁体   English   中英

如何在Java正则表达式中逃脱刹车?

[英]how to escape brakets in java regex?

我有一个像这样的字符串:

[1359873374000,281197568],[1360044062000,1206052864],[1360068648000,991623168]

如何使用正则表达式提取[1359873374000,281197568]类的每个项目?

我已经编写了这段代码,但是它不起作用:

String[] parts = mainstr.split("\\[[0-9],[0-9]\\]");

您的正则表达式匹配[1,2] 您必须添加一个乘数:

"\\[[0-9]+,[0-9]+\\]"

编辑:我不认为split()会做你想要的。 看一下Matcher类

Matcher类的解决方案:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

String sourceString = "[1359873374000,281197568],[1360044062000,1206052864],[1360068648000,991623168]";

Pattern pattern = Pattern.compile("\\[[0-9]+,[0-9]+\\]");
Matcher matcher = pattern.matcher(sourceString);

while (matcher.find()) {
  System.out.print("Start index: " + matcher.start());
  System.out.print(" End index: " + matcher.end() + " ");
  System.out.println(matcher.group());
}

这将为您提供号码对的所有出现。 如果要单独使用数字,可以像这样捕获它们: "\\\\[([0-9]+),([0-9]+)\\\\]" 但是,您将不得不扩展示例。

你应该分解

(?<=\\]),(?=\\[)

[0-9]精确匹配一位数字。 如果要匹配数字序列,请使用[0-9]* 如果要匹配非空数字序列,请使用[0-9]+ 在您的情况下,您可能需要执行"\\\\[[0-9]+,[0-9]+\\\\]" ,或者同样是"\\\\[\\\\d+,\\\\d+\\\\]"因为\\d在Java正则表达式中表示“数字”。

这是不完美的,因为它丢失了一些括号,但至少数字是完整无缺的并正确分组:

String[] parts = mainstr.split("\\D,\\D");

您可能希望拆分'],[',而不是搜索的整个模式。 尝试这个:

String[] parts = mainstr.split("\\\\],\\\\["); // Never sure when to use double or quadruple slashes.

之后,您可能需要更换支架。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM