Ich habe eine C-Datei. Mit einem Kommentarsatz im C-Stil /* */ gefolgt von einer Variablen, die für jeden Kommentar definiert ist. Der Variablenname steht auch im Kommentar. Einige Kommentare enthalten Variablennamen, für die sie nicht bestimmt sind (siehe den 3. Kommentar im folgenden Beispiel).
Hier ist ein Beispiel für das Format:
/* Object: function1: Does some really cool things and then it ends */
const function1 = someValue;
/* Object: function2: Does more really cool things and then it ends */
const function2 = someValue2;
/* Object: function3: Does even more really cool things
just like function2, does but continues over to the next line for a multiline comment */
const function3 = someValue3;
/* Object: function4: Does all kinds of cool things
and needs function1 in order to set a value correctly */
const function4 = someValue4;
/* Object: function5: Does some other cool things
and needs function2[with another variable] to do some things */
const function5 = someBValue5;
Ich möchte nur die Variablennamen mit einem Ergebnis wie diesem abgleichen: Funktion1 Funktion2 Funktion3 Funktion4 Funktion5
Ich habe stundenlang auf https://regexr.com/ damit herumgespielt und kann dieses nicht bekommen.
Folgendes habe ich versucht:
Regex, um eine Zeichenfolge zu finden, ohne Kommentare
. Bei diesem Beitrag wird ein negatives Lookbehind verwendet. Ich kann kein negatives Lookbehind verwenden, da diese Regex in Perl 5.32.1 auf einem Windows 10-Computer verwendet wird.
Das ist das Beste was mir eingefallen ist:
(\bfunction[\w]+\b[^:,])
Wobei es Zeilenübereinstimmungen mit: oder ausschließt, aber keine Duplikate ausschließt, die in /* */ eingeschlossen sind. Aber ich konnte es nicht herausfinden, außer einen negativen Lookbehind zu verwenden, den ich nicht verwenden kann.
Letztendlich wäre es meiner Meinung nach die beste Lösung, alles zwischen /* */ auszuschließen und nur nach Dingen zu suchen, die nicht in den Kommentaren enthalten sind. Aber es müsste den Ausschluss von mehrzeiligen Kommentarinhalten unterstützen und darf kein negatives Lookbehind verwenden.
Lösung des Problems
Versuchen Sie, const
als Filter zu verwenden:
"const (\bfunction[\w]+\b[^:,])"
Es lässt keine anderen Nachbarn zu und gibt Ihnen eindeutige Werte für Funktionsnamen.
Um Ihre Gruppe zu erhalten, müssen Sie referenzieren \1
und erhalten nur den Funktionsnamen.
Keine Kommentare:
Kommentar veröffentlichen