Java正则表达式拆分字符串不起作用

时间:2016-02-18 18:50:53

标签: java regex

我需要在Java中使用正则表达式拆分字符串。

我需要获得一个数组:AB01/01/2016 12:31D

为什么我的正则表达式不起作用?它将输出原始字符串。

String source = "A|B|[01/01/2016 12:31]|D";     
String regex = "\\|\\|\\[.*\\]\\|";

String[] array = source.split(regex);
for(String data: array){
    System.out.println(data);
}

2 个答案:

答案 0 :(得分:2)

正则表达式与输入字符串不匹配,因为它需要两个连续的管道(在模式的开头)。更准确地说,\|\|\[.*\]\|匹配2个管道,后跟[,后跟除换行符之外的零个或多个字符(尽可能多),然后是]和{{1} }。

您需要使用以下正则表达式:

|

请参阅IDEONE demo

此正则表达式将匹配一个或多个字符:String regex = "[|\\[\\]]+"; |]

答案 1 :(得分:0)

将第二行修改为输入字符串格式的以下内容,并使用-1调用split应该处理令牌为空(包括最后一个)时的所有情况

String regex = "((\\|\\[)|(\\]\\|)|(\\|))";

String[] array = source.split(regex, -1);

上面给出了'A | B | [01/01/2016 12:31] | D'的以下输出,如果是空D,它会打印一个零字符串。

A
B
01/01/2016 12:31
D

这虽然适用于格式为A | B | [C] | D的输入字符串,但线程[[| \ [\]]] +中提到的其他正则表达式将处理显示输入中任意位置的方括号与|只要没有零字符串,例如A || [C] | D将导致令牌移位。