code: public FieldExpression parse(final String expression) {
          if (!StringUtils.containsAny(expression, SPECIAL_CHARS_MINUS_STAR)) {
              if (expression.contains(QUESTION_MARK_STRING) && !fieldConstraints.getSpecialChars().contains(QUESTION_MARK)) {
                  throw new IllegalArgumentException("Invalid expression: " + expression);
              }
  
              return noSpecialCharsNorStar(expression);
          } else {
              final String[] array = expression.split(",");
              if (array.length > 1) {
                  return commaSplitResult(array);
              } else {
                  final String[] splitted = expression.split("-");
                  if (expression.contains("-") && splitted.length != 2) {
                      throw new IllegalArgumentException("Missing values for range: " + expression);
                  }
                  return splitted[0].equalsIgnoreCase(L_STRING)
                          ? parseOnWithL(splitted[0], mapToIntegerFieldValue(splitted[1]))
                          : dashSplitResult(expression, splitted);
              }
          }
      }
docs: Parse given expression for a single cron field.
  
  @param expression - String
  @return CronFieldExpression object that with interpretation of given String parameter