Ich versuche einen Selektor zu schreiben, der alles nach einem Kommentar (#) Symbol ausfiltert / löscht, aber # Symbole in Strings ignoriert ("" oder "")
Im folgenden Beispiel würde also nur die letzte Zeile gefiltert / gelöscht werden
"#dummy comment" asd asd
" abc # dummy comment"
abc #real comment
Dies sind die beiden Regex-Selektoren, die ich bisher entwickelt habe (ich werde das s / tag später hinzufügen):
/("|").*#.*("|")/g --> selects fake commnts
/#(?!!).+/g ---> highlights all comments, including above ones (?!! is to ignore #!/usr/bin/env perl )
Ich kämpfe gerade darum, diesen beiden beizutretenKommentare, um das obige Ergebnis zu erreichen. Ich habe versucht, Vorwärts-und Reverse-Lookups, aber nicht scheinen, das richtig zu machen. Jeder Rat würde sehr geschätzt werden.
Antworten:
2 für die Antwort № 1Was ist mit dieser einfachen Methode?
- Entfernen Sie zuerst alle Teilstrings zwischen doppelten oder einfachen Anführungszeichen
- extrahiere Teilzeichenfolge nach a
#
durch einen einfachen regulären Ausdruck cpature
Hier ist das Testprogramm für Ihre Beispieleingabe:
#!/usr/bin/perl
use strict;
use warnings;
while (<DATA>) {
chomp;
s/[""][^""]*[""]//g;
if (m/#(.*)/) {
print "$1n";
}
}
__DATA__
"#dummy comment" asd asd
" abc # dummy comment"
abc #real comment