Regex - захват добавочных чисел между фигурными скобками - PullRequest
0 голосов
/ 02 ноября 2011

У меня есть фрагмент кода, который пытается несколько раз сопоставить шаблон с увеличенным индексом внутри цикла:

for(int count = 0; count < args.length; count++) {
        message.replaceFirst("^\\{" + count + "\\d}$", args[count]);
    }

Что я хочу сделать, это заменить вхождения {0}, {1} и т. Д. В строке сообщения на вхождения в аргументах. Но, как ни старайся, я просто не могу заставить шаблон соответствовать. Я не эксперт по регулярным выражениям, но я пробовал различные комбинации регулярных выражений, основанные здесь на других вопросах. Я также пытался использовать метод замены в StringUtils безрезультатно. Кто-нибудь может предложить какие-либо предложения?

Ответы [ 3 ]

1 голос
/ 02 ноября 2011

Не используйте регулярные выражения вообще. Вы заранее знаете строку поиска, и она является константой (т.е. вы можете построить ее из константных строк плюс переменная count), и, следовательно, нет необходимости включать регулярные выражения.

1 голос
/ 02 ноября 2011

Символы ^ и $ являются якорями.Они соответствуют началу и концу строки.Это выражение будет совпадать только в том случае, если вся строка является не чем иным, как {\\d}.Я не думаю, что они должны быть там вообще.

Кроме того, строки являются неизменяемыми в Java, правильное использование будет message = message.replaceAll(blah);

0 голосов
/ 02 ноября 2011

Попробуйте это регулярное выражение:

String pattern = "^\\{\\d+\\}$";

Объяснение:

  1. С начала строки получите {
  2. Затем получите столько цифр, скольковозможно
  3. Пока не будет достигнут } в конце строки

Пример:

String s = "{12}";
String pattern = "^\\{\\d+\\}$";
String s2 = s.replaceFirst(pattern, "9");

System.out.println(s2);

Выходы:

9

Это должно быть довольно легко применить к вашему коду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...