es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for 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:

    perl -0777 -pe 's#/\*.*?(?!\*/).*?\*/\s*##gs' archivo
    

    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 modificador s habilita el modo de varias líneas para el metacarácter punto (.).

Comments are closed.