/ / Perl Regex: Wie kombiniere ich diese 2 Regex-Anweisungen? [geschlossen] - Regex, Perl, Selektor

Perl Regex: Wie kombiniere ich diese 2 Regex-Anweisungen? [geschlossen] - Regex, Perl, Selektor

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 № 1

Was ist mit dieser einfachen Methode?

  1. Entfernen Sie zuerst alle Teilstrings zwischen doppelten oder einfachen Anführungszeichen
  2. 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