fork download
  1. /* Expresión regular para eliminación de comentarios de código
  2.   http://es.stackoverflow.com/q/56285/127
  3. */
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6.  
  7. class Ideone
  8. {
  9. public static void main (String[] args) throws java.lang.Exception
  10. {
  11. final String regex =
  12. "\\G" // Anclar a \\A o fin de coincidencia previa
  13. + "(" // GRUPO 1: capturar todo lo que no es comentario en $1:
  14. + " [^\"'/\\\\]*" // caracteres sin significado especial
  15. + " (?:" // estructuras especiales:
  16. + " (?: \\\\." // a. barra escapando caracter
  17. + " | /(?![*/])" // b. una / que no está seguida de / o *
  18. + " | \"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"" // c. texto entre comillas dobles
  19. + " | '[^'\\\\]*(?:\\\\.[^'\\\\]*)*'" // d. texo entre comillas simples
  20. + " )" //
  21. + " [^\"'/\\\\]*" // seguido de más caracteres sin significado
  22. + " )*+" // (estructuras especiales repetidas 0 a inf)
  23. + ")" // fin de Grupo 1
  24. + "(?:" // COMENTARIOS (no está dentro de $1)
  25. + " //.*" // a. // hasta el final de la linea
  26. + "| /\\*[^*]*(?:\\*(?!/)[^*]*)*\\*/" // b. /* hasta el siguiente */
  27. + ")";
  28.  
  29. final String texto =
  30. "var ar1 = \"asasasas /*dsdsdsd*/ \"\n"
  31. + "var ar2 = \"asaasas //dsdsdsd\"\n"
  32. + "var ar3 // = \"asaasas //dsdsdsd asdsadsadsad\"\n"
  33. + "/*var ar4*/ = \"asasasas /*dsdsdsd*/ dsadasdsda\" /*\n"
  34. + "var ar5 = \"asaasas //dsdsdsd asdsadsadsad\" //comentario\n"
  35. + "var ar6 = \"x\" */ + \"asaasas //dsdsdsd asdsadsadsad\"\n"
  36. + "var ar7 = \"x\" // + \"asaasas //dsdsdsd asdsadsadsad\"\n"
  37. + "var ar8 = \"asaasas //dsdsdsd asdsadsadsad\" //comentario\n"
  38. + "var ar9 = \"asaasas //dsdsdsd asdsadsadsad\"";
  39.  
  40. final String reempl = "$1";
  41.  
  42. final Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS);
  43. final Matcher matcher = pattern.matcher(texto);
  44.  
  45. final String resultado = matcher.replaceAll(reempl);
  46.  
  47. System.out.println("TEXTO:\n" + texto);
  48. System.out.println("\nRESULTADO:\n" + resultado);
  49. }
  50. }
Success #stdin #stdout 0.05s 4386816KB
stdin
Standard input is empty
stdout
TEXTO:
var ar1 = "asasasas /*dsdsdsd*/ "
var ar2 = "asaasas //dsdsdsd"
var ar3 // = "asaasas //dsdsdsd asdsadsadsad"
/*var ar4*/ = "asasasas /*dsdsdsd*/ dsadasdsda" /*
var ar5 = "asaasas //dsdsdsd asdsadsadsad" //comentario
var ar6 = "x" */ + "asaasas //dsdsdsd asdsadsadsad"
var ar7 = "x" // + "asaasas //dsdsdsd asdsadsadsad"
var ar8 = "asaasas //dsdsdsd asdsadsadsad" //comentario
var ar9 = "asaasas //dsdsdsd asdsadsadsad"

RESULTADO:
var ar1 = "asasasas /*dsdsdsd*/ "
var ar2 = "asaasas //dsdsdsd"
var ar3 
 = "asasasas /*dsdsdsd*/ dsadasdsda"  + "asaasas //dsdsdsd asdsadsadsad"
var ar7 = "x" 
var ar8 = "asaasas //dsdsdsd asdsadsadsad" 
var ar9 = "asaasas //dsdsdsd asdsadsadsad"