Wir haben einige Protokollierungsservice von einer API, die einige Probleme beim Abfangen der Datenbank hat, auf die eine Abfrage zugreift.So extrahieren Sie ein Wort aus einer Zeichenfolge
Say, eine Abfrage kommt wie folgt aus:
Select Top 10 * From DataBase..Table
Was ich möchte, ist erreichen, um „DataBase“ oder den Text vor dem „..“ auf der Saite.
Auch, manchmal eine Abfrage kommt wie folgt aus:
Select Top 10 * From DataBase.Schema.Table
Ist es möglich, die „DataBase“ string auf beiden Fällen zu bekommen?
Hier ist, was ich versucht habe zu tun, aber ich nicht so gut in regulären Ausdrücken.
([A-Z]+\.+?([A-Z])*(\.)+[A-Z])
Aber das paßt zu folgenden (auf eckige Klammern):
Select Top 10 * From [DataBase..T]able
Danke für die Hilfe!
Bearbeiten: Dies geschieht in C#, vor dem Senden der Abfrage/Anfrage an die Datenbank, wir versuchen, jede Anfrage dieser API-Methode zu protokollieren.
SQL ist eine komplexe Sprache, und der Versuch, es mit einem direkten String-Ansatz wie Regex zu analysieren, kann riskant sein, die vertrauenswürdigste Methode ist die Verwendung eines SQL-Parsers. Für Ihre spezifische Frage mit Ihrem spezifischen Beispiel schlage ich vor, das Schlüsselwort "Von" zu verwenden, um Ihr Muster zu starten und (in einer Erfassungsgruppe) alles zu nehmen, was kein Punkt nach irgendeiner Anzahl von Leerzeichen ist. –
Dies geschieht in C#. Es ist eine API, die Anfragen erfasst und sich vor dem Abfragen der Datenbank in einer Datei anmeldet. Es ist nicht in SQL Server getan, tut mir leid, wenn ich nicht klar war. –
Datenbankname kann ein beliebiges Zeichen einschließlich Punkt enthalten. Eine allgemeinere und naivere Herangehensweise besteht darin, die Teilstrings zwischen "von" und "." Zu finden, aber beachte, dass eine Datenbank auch "[FROM. ] ' – Slai