Regex abbina una stringa a sinistra di un commento C ++
-
29-10-2019 - |
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:
- a B c D e F
- //commento
Eventuali suggerimenti?
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?