code: @SuppressWarnings("serial")
      public final static String[] splitDpath(String dpath) {
          String[] tokens = StringUtils.split(dpath, PATH_SEPARATOR);
          List<String> tokenList = new ArrayList<String>() {
              {
                  for (String token : tokens) {
                      List<String> temp = new ArrayList<String>() {
                          {
                              String _token = token;
                              Matcher m = PATTERN_END_INDEX.matcher(_token);
                              while (m.matches()) {
                                  _token = m.group(1);
                                  add(0, m.group(2));
                                  m = PATTERN_END_INDEX.matcher(_token);
                              }
                              if (!StringUtils.isBlank(_token)) {
                                  add(0, _token);
                              }
                          }
                      };
                      addAll(temp);
                  }
              }
          };
          return tokenList.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
      }
docs: Split {@code DPath} string to tokens.
  
  <ul>
  <li>{@code "a.b.c.[i].d"} or {@code "a.b.c[i].d"} will be split into
  {@code ["a","b","c","[i]","d"]}</li>
  <li>{@code "a.b.c.[i].[j].d"} or {@code "a.b.c[i].[j].d"} or
  {@code "a.b.c[i][j].d"} or {@code "a.b.c.[i][j].d"} will be split into
  {@code ["a","b","c","[i]","[j]","d"]}</li>
  </ul>
  
  @param dpath
  @return
  @since 0.6.1