Java регулярное выражение, как сопоставить некоторую строку, которая не является некоторой подстрокой - PullRequest
0 голосов
/ 08 октября 2011

Например, моя строка организации:

CCC=123
CCC=DDDDD
CCC=EE
CCC=123
CCC=FFFF

Я хочу, чтобы все, что не равно "CCC = 123", было изменено на "CCC = AAA"

Итак, результат:

CCC=123
CCC=AAA
CCC=AAA
CCC=123
CCC=AAA

Как это сделать в регулярном выражении?

Если я хочу, чтобы все, что равно "CCC = 123", было изменено на "CCC = AAA", это легко реализовать:

(AAA [\ t] * =) (123)

Ответы [ 2 ]

1 голос
/ 08 октября 2011
s = s.replaceAll("(?m)^CCC=(?!123$).*$", "CCC=AAA");

(?m) активирует режим MULTILINE, который позволяет ^ и $ соответствовать началу и концу строк соответственно.$ в прогнозе гарантирует, что вы не пропустите что-то, что соответствует только частично, например CCC=12345.$ в самом конце на самом деле не является необходимым, поскольку .* в любом случае потребляет оставшуюся часть строки, но это помогает сообщить ваше намерение.

1 голос
/ 08 октября 2011

Вы можете использовать отрицательный прогноз:

public static void main(String[] args) 
{

    String foo = "CCC=123 CCC=DDD CCC=EEE";
    Pattern p = Pattern.compile("(CCC=(?!123).{3})");
    Matcher m = p.matcher(foo);
    String result = m.replaceAll("CCC=AAA");

    System.out.println(result);

}

выход:

CCC = 123 CCC = AAA CCC = AAA

Это нулевой ширины, без захвата , поэтому вам необходимо добавить .{3}, чтобы захватить несоответствующие символы для замены.

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