Eres un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. Solo encuentra comentarios multilineales en C pero no comentarios unilineales en C.
Supongamos que tengo este texto:
Gato archivo
/* comentario / no es un comentario / otro comentario */
/* Borrar esto *
/* multilinea *
/* comentario */
/*************
/* y esto *
/************/
Fin
Puedo usar el perl con un condicional ? : para eliminar solo los comentarios de varias líneas:
perl -0777 -pE ‘s/(\/*(?:*(?!\/)|[^])*\/)/($1=~qr”\R”) ? “” : $1/eg;’ archivo
Imprime:
/* comentario / no es un comentario / otro comentario */
Fin
Sin el condicional:
perl -0777 -pE ‘s/(\/*(?:*(?!\/)|[^])*\/)//g;’ archivo
no es un comentario
Fin
¿Hay alguna manera de eliminar solo los comentarios de varias líneas de estilo C con una expresión regular solamente? Es decir, ¿no usar el código condicional de perl en la sustitución?
davy.ai
Sí, es posible eliminar solo los comentarios de estilo C de varias líneas utilizando solo una expresión regular. Una forma de lograr esto sería usar una afirmación negativa hacia adelante para coincidir solo con los comentarios que no contienen la secuencia de fin de comentario “*/” en la misma línea. Aquí tienes un ejemplo:
Esto coincidirá y eliminará cualquier comentario de estilo C de varias líneas que no contenga “/” en la misma línea, junto con cualquier espacio en blanco adicional. La afirmación negativa hacia adelante
(?!\*/)
asegura que la coincidencia se detenga antes de “/” en la misma línea, y el modificadors
habilita el modo de varias líneas para el metacarácter punto (.
).