Regex для замены подстроки в строке с помощью муравья - PullRequest
0 голосов
/ 07 июня 2018

Я пытался использовать регулярное выражение в файле ant (используя тег replaceregexp) для замены определенной строки, которая не является константой, в классе java, например:
Замена: V1_0_0 на V2_0_0 В:

public void doSomething() {
    return "xxxxxxxV1_0_0.yyyyyyyy"
}

И, конечно, V1_0_0 всегда будет меняться. И .yyyyyyyy изменится, но xxxxxxx будет таким же

это ближе, что я мог бы получить: (? <= Xxxxxxx). *или (? <= xxxxxxx). *</p>

но вот что я получаю:

public void doSomething() {
    return "xxxxxxxV2_0_0;
}

xxxxxxx или yyyyyyyy может быть любым символом, допустимым в имени класса java

1 Ответ

0 голосов
/ 08 июня 2018

Попробуйте так:

(?:xxxxxxx)V[0-9]+_[0-9]+_[0-9]+(?:\.[a-z]+)?

Я сделал необязательную часть yyyyyy, используя ?.Может быть, вам нужен другой класс символов, чем a-z, возможно [a-zA-Z] или [a-zA-Z0-9_].

Демо

КодОбразец :

import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Ideone {
 public static void main(String[] args) throws java.lang.Exception {
  String regex = "(?:xxxxxxx)V[0-9]+_[0-9]+_[0-9]+(?:\\.[a-z]+)?";
  String string = "public void doSomething() {\n" 
                + "    return \"xxxxxxxV1_0_0.yyyyyyyy\";\n" 
                + "}";
  String subst = "xxxxxxxV2_0_0";

  Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
  Matcher matcher = pattern.matcher(string);

  String result = matcher.replaceAll(subst);
  System.out.println("Substitution result: " + result);
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...