/* Expresión regular para eliminación de comentarios de código
http://es.stackoverflow.com/q/56285/127
*/
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Ideone
{
{
"\\G" // Anclar a \\A o fin de coincidencia previa
+ "(" // GRUPO 1: capturar todo lo que no es comentario en $1:
+ " [^\"'/\\\\]*" // caracteres sin significado especial
+ " (?:" // estructuras especiales:
+ " (?: \\\\." // a. barra escapando caracter
+ " | /(?![*/])" // b. una / que no está seguida de / o *
+ " | \"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"" // c. texto entre comillas dobles
+ " | '[^'\\\\]*(?:\\\\.[^'\\\\]*)*'" // d. texo entre comillas simples
+ " )" //
+ " [^\"'/\\\\]*" // seguido de más caracteres sin significado
+ " )*+" // (estructuras especiales repetidas 0 a inf)
+ ")" // fin de Grupo 1
+ "(?:" // COMENTARIOS (no está dentro de $1)
+ " //.*" // a. // hasta el final de la linea
+ "| /\\*[^*]*(?:\\*(?!/)[^*]*)*\\*/" // b. /* hasta el siguiente */
+ ")";
"var ar1 = \"asasasas /*dsdsdsd*/ \"\n"
+ "var ar2 = \"asaasas //dsdsdsd\"\n"
+ "var ar3 // = \"asaasas //dsdsdsd asdsadsadsad\"\n"
+ "/*var ar4*/ = \"asasasas /*dsdsdsd*/ dsadasdsda\" /*\n"
+ "var ar5 = \"asaasas //dsdsdsd asdsadsadsad\" //comentario\n"
+ "var ar6 = \"x\" */ + \"asaasas //dsdsdsd asdsadsadsad\"\n"
+ "var ar7 = \"x\" // + \"asaasas //dsdsdsd asdsadsadsad\"\n"
+ "var ar8 = \"asaasas //dsdsdsd asdsadsadsad\" //comentario\n"
+ "var ar9 = \"asaasas //dsdsdsd asdsadsadsad\"";
final Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS);
final Matcher matcher = pattern.matcher(texto);
final String resultado
= matcher.
replaceAll(reempl
);
System.
out.
println("TEXTO:\n" + texto
); System.
out.
println("\nRESULTADO:\n" + resultado
); }
}