Saltar al contenido

Regex para que coincida con un comentario de varias líneas de estilo C

Posteriormente a consultar con expertos en el tema, programadores de deferentes ramas y profesores dimos con la respuesta a la interrogande y la dejamos plasmada en esta publicación.

Solución:

los mejor expresión regular de comentario multilínea es una versión desenrollada de (?s)/*.*?*/ eso parece como

String pat = "/\*[^*]*\*+(?:[^/*][^*]*\*+)*/";

Vea la demostración y explicación de expresiones regulares en regex101.com.

En breve,

  • /* – coincide con el comienzo del comentario /*
  • [^*]**+ – coincide con 0+ caracteres que no sean * seguido con 1+ literal *
  • (?:[^/*][^*]**+)* – 0+ secuencias de:
    • [^/*][^*]**+ – No un / o * (combinado con [^/*]) seguido de 0+ caracteres sin asterisco ([^*]*) seguido de 1+ asteriscos (*+)
  • / – clausura /

Las necesidades de expresiones regulares de David 26 pasos para encontrar la coincidencia en mi ejemplo stringy mi expresión regular solo necesita 12 pasos. Con grandes entradas, es probable que la expresión regular de David falle con un problema de desbordamiento de pila o algo similar porque el .*? la coincidencia de puntos perezosos es ineficiente debido a la expansión del patrón perezoso en cada ubicación que realiza el motor de expresiones regulares, mientras que mi patrón coincide con fragmentos lineales de texto de una sola vez.

Intente usar esta expresión regular (solo comentarios de una sola línea):

String src ="How are things today /* this is comment */ and is your code /* this is another comment */ working?";
String result=src.replaceAll("/\*.*?\*/","");//single line comments
System.out.println(result);

REGEX explicó:

Coincide con el carácter “/” literalmente

Coincide con el carácter “*” literalmente

“.” Coincide con cualquier carácter individual

“*?” Entre cero e ilimitadas veces, la menor cantidad de veces posible, ampliando según sea necesario (perezoso)

Coincide con el carácter “*” literalmente

Coincide con el carácter “/” literalmente

Alternativamente, aquí hay expresiones regulares para comentarios de una y varias líneas agregando (?s):

//note the added n which wont work with previous regex
String src ="How are things today /* thisn is comment */ and is your code /* this is another comment */ working?";
String result=src.replaceAll("(?s)/\*.*?\*/","");
System.out.println(result);

Referencia:

  • https://www.regular-expressions.info/examplesprogrammer.html

No se pueden analizar los comentarios de estilo C/C++ en la fuente de Java directamente.
Las cadenas citadas deben analizarse al mismo tiempo y dentro de la misma expresión regular
porque el string puede incrustar /* o //el comienzo de un comentario cuando es solo una parte
de El string.

Tenga en cuenta que hay necesidades adicionales de consideración de expresiones regulares si cuerdas en bruto construcciones
son posibles en el lenguaje.

La expresión regular que hace esta hazaña es esta.
Donde el grupo 1 contiene el Comentario y el grupo 2 contiene el Sin comentarios.
Por ejemplo, si estuviera eliminando comentarios, sería:

Encontrar
(/*[^*]**+(?:[^/*][^*]**+)*/|//(?:[^\]|\(?:r?n)?)*?(?:r?n|$))|("[^"\]*(?:\[Ss][^"\]*)*"|'[^'\]*(?:\[Ss][^'\]*)*'|[Ss][^/"'\]*)

Reemplazar
$2


De cuerda:
"(/\*[^*]*\*+(?:[^/*][^*]*\*+)*/|//(?:[^\\]|\\(?:\r?\n)?)*?(?:\r?\n|$))|("[^"\\]*(?:\\[\S\s][^"\\]*)*"|'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[\S\s][^/"'\\]*)"

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *