
نوشته شده توسط
mazoolagh
Imports System.Text.RegularExpressions
Public Class UsingRegEx
Const Blank As Char = ChrW(32)
Const pt1 As String = "--.*[^\r\n]" ' -- (Singleline Comment)
Const pt2 As String = "/\*((?:.|\s)*?)\*/" ' /**/ (Multiline Comment)
Const pt3 As String = "[N]?'((?:.|\s)*?)'" ' Single Quotes
Const pt4 As String = "\u0022((?:.|\s)*?)\u0022" ' Double Quotes
Const pt5 As String = "\[((?:.|\s)*?)\]" ' []
Const Pattern_Ignore = pt1 + "|" + pt2 + "|" + pt3 + "|" + pt4 + "|" + pt5
Private Sub Btn_Process_Click(sender As Object, e As EventArgs) Handles Btn_Process.Click
LB_Words.Items.Clear()
LB_Keywords.Items.Clear()
Dim strSQL As String = TB_Source.Text
Dim strMOD As String = strSQL
For Each m As Match In Regex.Matches(strMOD, Pattern_Ignore, RegexOptions.Multiline)
strMOD = strMOD.Remove(m.Index, m.Length)
strMOD = strMOD.Insert(m.Index, FillWhiteSpaces(m.Value))
Next
TB_Modified.Text = strMOD
'strMOD = Regex.Replace(strSQL, pattern, String.Empty)
Dim x As List(Of Char) = "(),;!=<>+-*/%^|&~".ToList
For Each c In x
strMOD = strMOD.Replace(c, Blank + c + Blank)
Next
strMOD = Regex.Replace(strMOD, "\s", Blank)
strMOD = Regex.Replace(strMOD, "[ ]{2,}", Blank)
Dim Words As List(Of String) = strMOD.Trim.Split(Blank).ToList
For Each word In Words
If Regex.IsMatch(word, "^[a-zA-Z_@]+$") Then
LB_Words.Items.Add(word)
If SQL_KeyWords.Contains(word.ToUpper) Then
LB_Keywords.Items.Add(word)
End If
End If
Next
End Sub
Function FillWhiteSpaces(str As String) As String
Return Regex.Replace(NZ(str), "\s", ChrW(&HFFFD))
End Function
Private Function NZ(str As String) As String
If String.IsNullOrEmpty(str) Then
Return String.Empty
Else
Return str
End If
End Function
End Class
سلام مجدد.
برای شناسایی Attribute ها برای سورس کد #C مخصوصا اونایی که مقدار رشته ای دارن و بینشون ممکنه فاصله باشه یا بدون فاصله باشه Pattern همین درسته؟
Const pt5 As String = "\[((?:.|\s)*?)\]" ' []