Regex - замена стоимости группы - PullRequest
2 голосов
/ 20 октября 2010

Я не уверен, возможно ли это сделать, но мне нужен способ заменить значение пронумерованной группы, указанной в выражении my regex, строкой, объявленной динамически во время выполнения, после того, как будет установлено соответствие.

Учитывая простой случай, что-то вроде ...

(/)?([A-Za-z0-9])?(/)?$

Я бы хотел иметь возможность замены для группы 2.

В настоящее время я использую Java-класс Matcher.

Ответы [ 3 ]

6 голосов
/ 20 октября 2010

Я не уверен, возможно ли это сделать ...

Да, это возможно.См. Пример ниже.

Я хотел бы иметь возможность добавить замену для группы 2.

Эта демонстрационная программа "включает".toUpperCase версия группы 2 в качестве замены.

import java.util.regex.*;

class Main {
    public static void main(String... args) {
        String input = "hello my name is /aioobe/ and I like /patterns/.";
        Pattern p = Pattern.compile("(/)([A-Za-z0-9]+)(/)");
        Matcher m = p.matcher(input);
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            String rep = m.group(1) + m.group(2).toUpperCase() + m.group(3);
            m.appendReplacement(sb, rep);
        }
        m.appendTail(sb);
        System.out.println(sb);
    }
}

Отпечатки:

hello my name is /AIOOBE/ and I like /PATTERNS/.
2 голосов
/ 20 октября 2010

Да, это выполнимо.Посмотрите мой ответ на этот вопрос , чтобы узнать как.На самом деле этот вопрос, вероятно, следует закрыть как дубликат.

Вам нужно будет немного изменить регулярное выражение.Я не могу точно сказать, что вы пытаетесь сделать, поэтому я не могу дать никаких подробностей, но по крайней мере вы должны переместить все эти знаки вопроса внутри групп.все равно будет соответствовать пустой подстроке в конце целевой строки, потому что все необязательно, кроме якоря, $.Это действительно то, что ты хотел сделать?

0 голосов
/ 20 октября 2010

Верните значение вашего поиска по регулярному выражению и сохраните его в переменной, затем сделайте замену в вашей главной строке, используя результаты поиска по регулярному выражению в качестве цели поиска и свою динамически объявленную строку в качестве замены.

Действительноупрощенный концептуальный:

String testString = "Hello there";
//String substring = *Do your regex work here*
if(substring.length() > 0) {
   testString.replace(substring, dynamicallyGeneratedString); 
}
...