@Override
    public Object parse(SourceData sourceData, int rowIndex, Context context) {
        if (inputStringParser == null || patternStringParser == null) {
            return null;
        }
        String inputString = OperatorTools.parseString(inputStringParser.parse(sourceData, rowIndex, context));
        String patternString = OperatorTools.parseString(patternStringParser.parse(sourceData, rowIndex, context));
        int index = 0;
        if (indexIntegerParser != null) {
            index = OperatorTools.parseBigDecimal(indexIntegerParser.parse(sourceData, rowIndex, context)).intValue();
        }
        if (index < 0) {
            return null;
        }
        List<String> resultList = new ArrayList<>();

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(inputString);
        while (matcher.find()) {
            if (index <= matcher.groupCount()) {
                resultList.add(matcher.group(index));
            } else {
                return null;
            }
        }

        return resultList.isEmpty() ? null : resultList;
    }
RegexpExtractAllFunction  ->  regexp_extract_all(str, regexp[, extractIndex])
description:
- Return NULL if any of the arguments are NULL or invalid
- Return an array consisting of all substrings from the 'str' that match the 'regexp' expression and correspond to
         the 'extractIndex' set of regular expressions.
Note: 'regexp' must be a Java regular expression. 'extractIndex' indicates which regexp group to extract and starts
      from 1, also the default value if not specified. 0 means matching the entire 'regexp' expression.
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/string/RegexpExtractAllFunction.java