Преобразование регулярного выражения C # в проблему соответствия Java - PullRequest
1 голос
/ 08 марта 2019
public static String ReturnBetween(String heap, String startEx, String endEx, boolean include) {
        int startPos = 0;
        int endPos = heap.length();
        String starts = "";
        String ends = "";

        if (!startEx.equals("^")) {
            Pattern regexStart = Pattern.compile(startEx, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
            starts = regexStart.matcher(heap).toString();
            if (starts.equals("")) {
                startPos = -1;
            } else {
                startPos = heap.indexOf(starts);
            }
        }

        if (startPos == -1) {
            return "";
        }

        if (!endEx.equals("$")) {
            Pattern regexEnd = Pattern.compile(endEx, Pattern.CASE_INSENSITIVE | Pattern.DOTALL );
            ends = regexEnd.Match(heap, startPos + starts.length()).toString();
            if (ends.equals("")) {
                endPos = -1;
            } else {
                endPos = heap.indexOf(ends, startPos + starts.length());
            }
        }

        if (endPos == -1) {
            return "";
        }

        if (!include) {
            startPos += starts.length();
        }
        if (include) {
            endPos += ends.length();
        }

        String result = heap.substring(startPos, endPos);
        return result;
    }

Это была функция ac # для получения строки между двумя переменными. Я пытаюсь преобразовать ее в функцию Java, большая часть которой уже преобразована в код Java.мне удалось преобразовать эту функцию.кроме этой части:

  ends = regexEnd.Match(heap, startPos + starts.length()).toString();

1 Ответ

1 голос
/ 08 марта 2019

Вы должны заменить

ends = regexEnd.Match(heap, startPos + starts.length()).toString();

с

Matcher m = regexEnd.matcher(heap);
if (m.find(startPos + starts.length())) {
  ends =  m.group();
}

Дело в том, что вам нужно объявить средство сравнения и создать его экземпляр с помощью входной строки (heap) из Pattern, который у вас уже есть (regexEnd).

Затем вы выполняете сопоставление, используя .find(index), где index - начальная позиция для поиска. Если есть совпадение, m.group() содержит значение совпадения.

...