Mein Programm liest den Quellcode anderer Programme und spaltet Informationen über verwendete SQL-Abfragen. Ich habe Probleme beim Abrufen von Teilzeichenfolgen.
%Vor%Im Ergebnis drucke die ganze Zeile und keine Teilstring, die ich erwarte. Ich habe es anders versucht, aber ich benutze Perl selten und mache wahrscheinlich grundlegende Konzeptfehler. (Die Position des Tabellennamens in der Zeile ist nicht festgelegt. Ein anderes Problem ist das mehrfache Auftreten, d.h. [... SELECT * FROM AADTTAB, BBDTTAB, ...]). Wie kann ich diese Teilzeichenfolge erhalten?
Verwenden Sie die Gruppierung mit Klammern und speichern Sie die erste Gruppe.
%Vor%Der obige Code behebt das unmittelbare Problem, den ersten Tabellennamen herauszuziehen. In der Frage wurde jedoch auch gefragt, wie alle Tabellennamen herausgezogen werden. Also:
%Vor%Ergebnis:
Wenn $ line="SELECT * FROM AADTTAB, BBDTTAB;"
Ausgabe:
%Vor%Wenn $ line="SELECT * FROM AADTTAB;"
Ausgabe:
%Vor%Perl Version: v5.10.0 für MSWin32-x86-Multithread
erstelltIch bevorzuge das:
%Vor%Dies
$line
und erfasst den Text, der dem Muster Dieser Pseudo-Listen-Kontext ist, wie wir das erste Element in einer Liste fangen. Es wird auf die gleiche Weise wie an eine Unterroutine übergebene Parameter ausgeführt.
%Vor%HINWEIS: : Das heißt, Ihre Regex nimmt zu viel von dem Text an, um in mehr als einer Handvoll Situationen nützlich zu sein. Kein Tabellenname, der nicht dt wie in den Positionen 3 und 4 von 7 hat? Capturing? Es ist gut genug für 1) schnell und schmutzig, 2) wenn Sie mit eingeschränkter Anwendbarkeit einverstanden sind .
Es wäre besser, das Muster anzupassen, wenn es FROM
folgt. Ich nehme an, Tabellennamen bestehen ausschließlich aus ASCII-Buchstaben. In diesem Fall ist es am besten zu sagen, was Sie wollen. Beachten Sie, dass eine erfolgreiche erfasste Regex-Übereinstimmung im Listenkontext die übereinstimmende (n) Teilzeichenfolge (n) zurückgibt.
Ausgabe:
%Vor% Abhängig von der Version von perl
auf Ihrem System können Sie möglicherweise eine benannte Erfassungsgruppe verwenden, die das Ganze leichter lesbar macht:
Siehe perldoc perl .
$&
enthält die Zeichenfolge, die mit der letzten Musterübereinstimmung übereinstimmt.
Beispiel:
%Vor%Sie könnten also etwas wie
tun %Vor% Wenn Sie in Ihrem Code $&
verwenden, verlangsamt es alle Musterübereinstimmungen.