user2403705
user2403705

Reputation: 43

VB.Net help selecting first index of string with regex

I was wondering if there was a way I could start a selection from the Regex string i have in the below example

The below example works exactly how I want it too however if there is text that matches before it on another line it is choosing the wrong text and highlighting it.

What im wondering is if there is a way to get the start index of the regex string?

If Regex.IsMatch(Me.TextBox1.Text, "\b" + Regex.Escape("is") + "\b") Then
    Me.TextBox1.SelectionStart = Me.TextBox1.Text.IndexOf("is")
    Dim linenumber As Integer = Me.TextBox1.GetLineFromCharIndex(Me.TextBox1.Text.IndexOf("is"))
    Me.TextBox1.SelectionLength = Me.TextBox1.Lines(linenumber).Length
    Me.TextBox1.Focus()
    Me.TextBox1.SelectedText = "is " & Me.TextBox2.Text

Upvotes: 0

Views: 2833

Answers (1)

Adrian
Adrian

Reputation: 2875

The System.Text.RegularExpression.Match object has a property which should help you here: Match.Index. Match.Index will tell you where the capture starts, and Match.Length tells you how long it is. Using those you could change your code to look like this:

If Regex.IsMatch(Me.TextBox1.Text, "\b" + Regex.Escape("is") + "\b") Then
    Dim m as Match
    m = Regex.Match(Me.TextBox1.Text, "\b" + Regex.Escape("is") + "\b")
    Me.TextBox1.SelectionStart = m.Index
    Dim linenumber As Integer = Me.TextBox1.GetLineFromCharIndex(m.Index)
    Me.TextBox1.SelectionLength = Me.TextBox1.Lines(linenumber).Length
    Me.TextBox1.Focus()
    Me.TextBox1.SelectedText = "is " & Me.TextBox2.Text

Upvotes: 1

Related Questions