Regex references

G

Guest

I have a Perl background, so some of what I know in other contexts is
probably getting in the way of what I need to learn now. With that
said, I'm having a problem getting my regex to work as I expect. I
have a string value like "John Q Public" in a textbox called "Name",
and I want to use the regex to split out first name and last name.
Here's what I've coded:

Dim FirstName As String
Dim LastName As String
If Regex.IsMatch(NameTextBox.Text, "(^\w+)\s(\w\s)?(\w+)$")
Then
FirstName = $1
LastName = $3
End If

but the the VB 2005 Express IDE is telling me the $ in $1 and $3 are
invalid characters.

My hunch is that $1 and $3 only make sense inside the Regex namespace,
but I'm not sure what my next step should be. Do I need to create a
Match object to access the values? All the examples I've found on the
web seem to assume that the only reason you'd want to extract values is
to re-arrange them in a replace, but that's not what I have in mind.
 
D

david

I have a Perl background, so some of what I know in other contexts is
probably getting in the way of what I need to learn now. With that
said, I'm having a problem getting my regex to work as I expect. I
have a string value like "John Q Public" in a textbox called "Name",
and I want to use the regex to split out first name and last name.
Here's what I've coded:

Dim FirstName As String
Dim LastName As String
If Regex.IsMatch(NameTextBox.Text, "(^\w+)\s(\w\s)?(\w+)$")
Then
FirstName = $1
LastName = $3
End If

but the the VB 2005 Express IDE is telling me the $ in $1 and $3 are
invalid characters.

My hunch is that $1 and $3 only make sense inside the Regex namespace,
but I'm not sure what my next step should be. Do I need to create a
Match object to access the values? All the examples I've found on the
web seem to assume that the only reason you'd want to extract values is
to re-arrange them in a replace, but that's not what I have in mind.

You need to create a Match object.

Dim m As Match = Regex.Match(NameTextBox.Text, pattern)

If m.Success Then
FirstName = m.Groups(1).Value
LastName = m.Groups(3).Value

PS. .Net has some nice additions for regex such as named capture and
non-capture, consider:

(?<firstName>^\w+)\s(?:\w\s)?(?<lastName>\w+)$

' Now you can use
FirstName = m.Groups("firstName").Value
 
?

=?ISO-8859-1?Q?G=F6ran_Andersson?=

The IsMatch method only checks for a match, it doesn't store the
matches. The $ references are only used in a replacement string.

Use the Match method to get a Match object. The Groups property in the
Match object is a collection of the captures.
 
H

housebuyer

Thanks to everyone who posted, it's working like a charm now.

The main reason I'd been using Perl was for the regex capabilities, and
I still prefer it for my scripting work. For interactive applications
like the one I'm tackling now, however, I found Perl/Tk to be a lot
more difficult to use than the .NET IDE. I think going forward, a
significant number of the applications that I would have formerly done
in Perl are going to be done with .NET.

Thanks again to all.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top