短いバージョン: 文字列に「0,0,0,0」が含まれているかどうかを調べる正規表現を作成しようとしています。私が行ったすべての試みは、引用符内の完全な文字列ではなく、各文字を一致として返すだけです。
VB.NETのテキストボックス内の文字列内で特定のテキストを見つけようとしています。私の問題は、1 つの一致を返す代わりに、文字列内の各文字を一致として返すことです。通常、正規表現の問題だと思いますが、いくつかのオンライン ツールで動作することを確認したので、100% 確信はありません。
一致させようとしている文字列は次のとおりです。
0,0,0,0
一致を見つけようとしている文字列は次のようになります。
Image(0,0,0,0,"Path")
私は FastColoredTextBox と呼ばれるコントロールを使用しています。これにより、特定の文字列のカラー スタイルやその他のカスタム スタイルの範囲を設定できます。以下は、私が通常スタイル範囲を追加する方法です。
現在、単語をクリック可能にする機能を追加したので、正規表現を取得して、クリック可能にしたい文字列の一致を作成しようとしています。例えば:
これが正規表現です。
Private Sub tb_textchanged(ByVal sender As System.Object, ByVal e As TextChangedEventArgs)
' This is working code to make the word Path clickable in the above string:
e.ChangedRange.SetStyle(ellipseStyle, "\bPath\b", RegexOptions.IgnoreCase)
' When I use these ones it returns each character as a match and not the full string. The mystery...
e.ChangedRange.SetStyle(ellipseStyle, "0,0,0,0", RegexOptions.IgnoreCase)
e.ChangedRange.SetStyle(ellipseStyle, "(0,){4}", RegexOptions.IgnoreCase)
End Sub
ユーザーが正規表現を使用して範囲として設定された単語をクリックすると (上記の例)、その単語がクリック可能になります。ユーザーが単語をクリックすると、正規表現で指定された範囲全体が選択されます。これを除いて、各「0」と「、」を独自の一致として返すため、単一の文字のみを返す/選択します。
理解を深めるために単語をクリックするコードを次に示します。これには正規表現は含まれませんが、上記の textchanged イベントには含まれます。
Private Sub tb_VisualMarkerClick(sender As Object, e As VisualMarkerEventArgs)
Dim page As RadPageViewPage = RadPageView1.SelectedPage
Dim txt As FastColoredTextBox = TryCast(page.Controls(0), FastColoredTextBox)
txt.Invalidate()
txt.Selection.Start = New Place((TryCast(e.Marker, RangeMarker).range).Start.iChar, (TryCast(e.Marker, RangeMarker).range).Start.iLine)
txt.SelectionLength = (TryCast(e.Marker, RangeMarker).range).Text.Length
Dim ClickedWord As String = (TryCast(e.Marker, RangeMarker).range.Text)
If ClickedWord = "Path" Then
Dim ofd As New OpenFileDialog
ofd.FileName = ""
ofd.Filter = "Image Files (*.bmp, *.jpg)|*.bmp;*.jpg"
If ofd.ShowDialog = DialogResult.OK Then
txt.InsertText(ofd.FileName)
End If
ElseIf ClickedWord = "0,0,0,0" Then
'What I am going to do when found.
End If
End Sub
長い文章で申し訳ありませんが、誰かが私の謎を解決するのを手伝ってくれることを願っています.