如何在java正则表达式中转义括号?

时间:2013-02-07 10:55:02

标签: java regex

我有一个这样的字符串:

  

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

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

我已编写此代码,但它不起作用:

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

5 个答案:

答案 0 :(得分:2)

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

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

编辑: 我认为split()不会做你想做的事。看看Matcher Class

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]+)\\]"。你必须扩展这个例子。

答案 1 :(得分:2)

你应该

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:-1)

你可能想分开'],[',而不是你正在搜索的整个模式。试试这个:

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

之后,您可能需要更换括号。