Come trovare questo modello usando regex?Espressione regolare per trovare commenti del blocco di stile C
Blocca i commenti in stile C
/* xxxxxxxxxxxx */
Come trovare questo modello usando regex?Espressione regolare per trovare commenti del blocco di stile C
Blocca i commenti in stile C
/* xxxxxxxxxxxx */
mi raccomando solo usando un parser, come i commenti, ma se solo per divertimento - off superiore della mia testa, si potrebbe fare qualcosa di simile utilizzando Ruby, supponendo che si sa già come ottenere i contenuti da un file (tenere a mente questo è molto agitato e solo una possibile guida - prolly non funziona out of the box):
def one_liner_comment string
string.match /\/\*.*\*\//
end
def multi_liner_comment_start string
# if always checking for one_liner_comment in code would not need first !one_...
!one_liner_comment(string) && string.match(/\/\*/)
end
def multi_liner_comment_end string
# if always checking for one_liner_comment in code would not need first !one_...
!one_liner_comment(string) && string.match(/\*\//)
end
Poi per determinare dove vi sono solo
Quindi eseguire tutto ciò che si desidera fare con i tuoi commenti da qui in poi.
if inline
# do whatever you want
one_liner = false
elsif started && !ended
# do whatever you want -> append or create new string
elsif started && ended
# do whatever you want -> append to string
started = false
ended = false
end
sicuro che potrebbe anche essere ripulito ...
Prova utilizzando
\/\*(\*(?!\/)|[^*])*\*\/
per catturare singola linea e commenti a blocchi multilinea. Esso cerca /*
seguita da un numero qualsiasi di uno:
*
che non è seguito da un /
*
e quindi la chiusura */
nuovamente.
Non è necessario abbinare caratteri di spaziatura in un ramo separato; '[^ * /]' li ha coperti. Tutto il '| \ s' è aperto a [backtracking catastrofico] (http://www.regular-expressions.info/catastrophic.html). Inoltre, è necessario rimuovere quella barra, altrimenti la regex non riuscirà a far corrispondere i commenti con barre all'interno. –
Modificato sui suggerimenti (sebbene OP abbia detto che i commenti con barre non sembrano essere un problema) – Campfire
perché non '/\*(.(?!\*/))*\*/'? prima un '/ *' quindi qualsiasi carattere non seguito da '* /' then '* /' – zzh1996
Cosa succede se '/ *' è sulla stessa riga e dopo un '//', nel senso che non inizia un commento? – Patashu
No, non ho bisogno di gestire tale situazione – linquize
Oltre a utilizzare le espressioni regolari, se si desidera andare a tutto esaurito è possibile utilizzare un parser di lingua con una grammatica di linguaggio C (o qualsiasi altra cosa). Esempi sono yacc, javacc, antlr –