Составить регулярное выражение для замены одинарного знака сравнения

Необходимо в условии заменить одинарный знак '=' на двойное. Перед и после знака равно могут быть пробелы. Условия со знаками: '>=', '<=', '==', '!=' оставить как есть.

 public class ReplaceSingleCharCompare {
   public static void main(String[] args) {
     String exp = "if (a=b)"; // должно быть if (a == b)
 //    exp = "if (a=b & b = c)"; // должно быть if (a == b & b == c)    
 //    exp = "if (a=b & b <= c)"; // должно быть if (a == b & b <= c)
 //    exp = "if (a>=b && b = 1 && b <= c)"; // должно быть if (a>=b && b == 1 && b <= c)
 //    exp = "if (a>=b && b == 1 && b <= c && c=0)"; // должно быть if (a>=b && b == 1 && b <= c && c == 0)
 //    exp = "if (a>=b && b <= c)"; // должно быть if (a>=b && b <= c)

     exp = exp.replaceAll("if \\((.+?)=(.+?)\\)", "if ($1 == $2)");

     System.out.println(exp);
   }
 }

Ответы (1 шт):

Автор решения: default locale

Вроде так работает:

exp = exp.replaceAll("(?<![><!=])=(?!=)", "==");

Здесь используются негативные просмотры назад и вперед:

  • (?<![><!=]) — не меняем, если перед знаком «=» стоит один из «><!=».
  • (?!=) — так же не меняем, если после него стоит еще один «=».
→ Ссылка