2017-07-03 1 views
0

Ich brauche ein Muster, das eine sehr spezifische Sache tut, aber nach Stunden kann ich das erwartete Ergebnis nicht erreichen.VBScript RegEx Muster

Beispiel string:

SELECT col1 FROM tbl1 WHERE col1 = (SELECT col2 FROM tbl2 WHERE col2=col2) 

Erwartetes Ergebnis:

FROM tbl1 WHERE col1 = (SELECT col2 FROM tbl2 WHERE col2=col2) 

    -> tbl1 
    -> WHERE col1 = (SELECT col2 FROM tbl2 WHERE col2=col2) 

Actual Muster:

FROM\s+([^\s,]+)[\s\S]+(WHERE[\s\S]+) 

Tatsächliches Ergebnis:

FROM tbl1 WHERE col1 = (SELECT col2 FROM tbl2 WHERE col2=col2) 

    -> tbl2 
    -> WHERE col2=col2) 

Ich habe versucht mit Blick voraus und andere Dinge, aber ich kann es nicht Gruppe von der ersten "WHERE" machen.

Hinweis: Zwischen 'tbl1' und 'WHERE' sollte alles Mögliche passen, nicht nur ein Leerzeichen.

Anmerkung2: Es sollte alle nach dem ersten "WHERE" gruppieren, auch wenn es später nicht wo ist.

+0

Sie sollten eine Liste der repräsentativen Eingangs-/Ausgangspaar veröffentlichen und zumindest einen Hinweis auf Ihre Strategie, um die Ausgaben der Match-Objekte zu erzeugen. –

+1

Warum das VB6-Tag? – DaveInCaz

Antwort

1

Bis weitere Details veröffentlicht werden, behaupte ich, dass ein nicht gierig Muster, das Problem lösen:

Option Explicit 

Dim r : Set r = New RegExp 
'r.Pattern = "FROM\s+([^\s,]+)[\s\S]+(WHERE[\s\S]+)" 
r.Pattern = "FROM\s+([^\s,]+)[\s\S]+?(WHERE[\s\S]+)" 
'Dim s : s = "SELECT col1 FROM tbl1 WHERE col1 = (SELECT col2 FROM tbl2 WHERE col2=col2)" 
Dim s : s = "SELECT col1 FROM tbl1 WHERE col1 = (No W h e r e here)" 
Dim m : Set m = r.Execute(s) 
If 1 = m.Count Then 
    Dim t : t = Join(Array("From", m(0).SubMatches(0), m(0).SubMatches(1), _ 
          vbCrLf, vbCrLf, "->", m(0).SubMatches(0), vbCrLf, "->", m(0).SubMatches(1))) 
    WScript.Echo s 
    WScript.Echo t 
Else 
    WScript.Echo "no match" 
End If 

Ausgang:

cscript 44890052.vbs 
SELECT col1 FROM tbl1 WHERE col1 = (No W h e r e here) 
From tbl1 WHERE col1 = (No W h e r e here) 

-> tbl1 
-> WHERE col1 = (No W h e r e here) 
+0

Es funktionierte gut, sogar mit dem zweiten "wo". Danke! – MauriF