Jak znaleźć ten wzór za pomocą wyrażeń regularnych?Wyrażenie regularne, aby znaleźć komentarze bloku stylu C
C stylu komentarze blokowe
/* xxxxxxxxxxxx */
Jak znaleźć ten wzór za pomocą wyrażeń regularnych?Wyrażenie regularne, aby znaleźć komentarze bloku stylu C
C stylu komentarze blokowe
/* xxxxxxxxxxxx */
Gorąco polecam tylko przy użyciu parser, jak komentarze, ale jeśli po prostu dla zabawy - przy mojej głowie, można zrobić coś takiego za pomocą Ruby zakładając, że już wie, jak uzyskać zawartość z pliku (należy pamiętać, jest to bardzo niebezpieczne i tylko możliwe guide - naprawde nie będzie działać po wyjęciu z opakowania):
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
Następnie, aby określić, gdzie jesteś tylko
if one_liner(string)
inline = true
elsif multi_liner_comment_start(string)
started = true
elsif started && multi_liner_comment_end(string)
ended = true
end
Następnie wykonaj co chcesz zrobić ze swoimi komentarzami stąd.
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
Oczywiście może to być również oczyszczone ...
Spróbuj użyć
\/\*(\*(?!\/)|[^*])*\*\/
uchwycić jedną linię i komentarze blok obsługujący kilka linii. Wyszukuje /*
następnie dowolną liczbę albo:
*
że nie następuje /
*
a następnie ponownie zamykanie */
.
Nie musisz dopasowywać białych znaków w oddzielnym oddziale; '[^ * /]' ma je pokryte. Wszystkie '' \ s' są otwarte na [katastroficzne cofanie] (http://www.regular-expressions.info/catastrophic.html). Trzeba też wydostać się z tego slashu, inaczej regex nie dopasuje komentarzy do ukośników wewnątrz nich. –
Zmieniono na twoje sugestie (chociaż OP powiedział, że komentarze z ukośnikami nie wydają się być problemem) – Campfire
dlaczego nie '/\*(.(?!\*/))*\*/'? najpierw "/ *", a następnie dowolny znak nie poprzedzony przez '* /', a następnie '* /' – zzh1996
Co jeśli '/ *' jest w tej samej linii i po znaku '//', co oznacza, że nie uruchamia komentarza? – Patashu
Nie, nie potrzebuję obsłużyć takiej sytuacji. – linquize
Oprócz używania wyrażeń regularnych, jeśli chciałeś przejść na całość, możesz użyć parsera językowego z gramatyką języka C (lub czegoś podobnego). Przykładami są yacc, javacc, antlr –