Java: заменить несколько строковых шаблонов из одного строкового значения - PullRequest
2 голосов
/ 03 сентября 2011

Я изо всех сил пытаюсь заставить это работать.

У меня есть шаблон регулярного выражения: ".*(${.*}).*"

И строковая переменная myVar = "name = '${userName}' / pass = '${password}'"

У меня есть хэш-карта, в которой хранятся значения, в этом случае «$ {userName}» будет иметь значение «Джон Доу», а «$ {пароль}» будет иметь значение «secretpwd».

Как зациклить все найденные совпадения в myVar (в данном случае «userName» и «password»)? Затем я мог бы зациклить каждое найденное совпадение и запросить их соответствующее значение из хэш-карты.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 03 сентября 2011

Вы можете использовать, например, следующий код:

Pattern p = Pattern.compile("\\$\\{.*?\\}");
while (true) {
    Matcher m = p.matcher(myVar);
    if (!m.find()) {
        break;
    }
    String variable = m.group();
    String rep = hash.get(variable);
    myVar = m.replaceFirst(rep);
}

Обратите внимание, что я настроил регулярное выражение в соответствии с вашими требованиями.

0 голосов
/ 03 сентября 2011

С этой строкой в ​​качестве регулярного выражения у вас будет 2 группы, содержащие "$ {user}" и "$ {password}":

".*(\\$\\{.*}).*(\\$\\{.*}).*"

Для перебора групп:

// Compile and use regular expression
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.find();

if (matchFound) {
    // Get all groups for this match
    for (int i=0; i<=matcher.groupCount(); i++) {
        String groupStr = matcher.group(i);
    }
}

источник: http://www.exampledepot.com/egs/java.util.regex/Group.html

...