Potrzebuję wyrażenia regularnego, które zastąpi nieparzystą liczbę ukośników parzystą liczbą ukośników, pozostawiając parzystą liczbę ukośników bez zmian.

Na przykład:

  • Test/123 --> Test//123
  • Test//123 --> Test//123
  • Test///123 --> Test//////123
-6
Wael 21 luty 2012, 18:47

2 odpowiedzi

Najlepsza odpowiedź
  Pattern p = Pattern.compile("(?<!/)/(//)*(?!/)");
  Matcher m = p.matcher(inputString);
  String outputStr = m.replaceAll("$0$0");
  • (?<!/) upewnia się, że tuż przed meczem nie ma ukośników;
  • /(//)* pasuje do nieparzystej liczby ukośników;
  • (?!/) upewnia się, że zaraz po meczu nie ma ukośników.

Zastępczym ciągiem jest $0$0, co podwaja dopasowane ukośniki.

Przetestowałem to na twoich wejściach i działa dokładnie zgodnie z twoją specyfikacją.

1
NPE 21 luty 2012, 19:11

Zamiast tego zamień (?<!/)((//)*/)(?!/) na cokolwiek chcesz.

0
Has QUIT--Anony-Mousse 21 luty 2012, 18:59