使用此正则表达式分割字符串:[\\ dc] +

时间:2018-12-18 11:52:55

标签: java regex string

这是一个相对容易分裂的Java问题。

public class Main {
    public static void main(String[] args) {
        String[] tokens = "aa33aaca^aa".split("[\\dc]+");
        for (int i = 0; i < tokens.length; i++)
            System.out.println(tokens[i]);  }
}

我想知道为什么这段代码的输出是

aa
aa
a^aa

“ [\\ dc] +”如何正常工作?

2 个答案:

答案 0 :(得分:3)

regular expression将通过重复至少一次的数字和字符'c'的任意组合来拆分测试:

  • \\d-任何数字[0-9]
  • c-字符“ c”
  • []+-此集合内的字符至少可以出现一次

所以您的字符串将像这样分割:

   1     2
aa[33]aa[c]a^aa

分割定界符:

  1. 数字发行2次。

  2. 字符c

答案 1 :(得分:1)

除上述出色的答案外,请注意,如果您在在线正则表达式测试器(例如rubular或其他)中测试[\\dc]+,则此正则表达式将与{{1}中的33不匹配}。他们会说:aa33aaca^aa

原因是在\d is mapping to Any digit character(0-9)中,我们以String.split()作为参数,因此我们需要另外的String来形成\,以使{{1}生效。