Domanda

Sto cercando un modello per estrarre una stringa a sinistra di un commento C ++ e il commento stesso. Il problema è che il lato sinistro può contenere anche una singola barra.

Esempio:

"abc/def//comment"

Di conseguenza, vorrei avere 2 gruppi che contengono il lato sinistro del commento e il commento stesso:

  1. a B c D e F
  2. //commento

Eventuali suggerimenti?

È stato utile?

Soluzione

Supponendo che tu stia elaborando il file riga per riga, questo regex farà quello che vuoi:

((?:(?!//).)*)(//.*)

o semplicemente:

(.*?)(//.*)

Cioè il gruppo 1 contiene abc/def e il gruppo 2 contiene //comment.

Tieni presente che quando questo fallisce con i letterali di stringa e i commenti multi-line (per nominare solo due fori):

"a string with // in it"

/*
// not a comment!
*/

Altri suggerimenti

echo "abc/def//comment" | sed -r 's|(.*)//(.*)|\1 //\2|'
abc/def //comment

Che dire di più coppie di barre? I commenti all'interno delle stringhe sono ok?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top