2008-11-28 7 views
0

J'ai besoin de boucle à travers tous les matchs à dire la chaîne suivante:RegEx pour correspondre le texte et enserrant accolades

<a href='/Product/Show/{ProductRowID}'>{ProductName}</a>

Je cherche à saisir les valeurs dans le {} les inclure, donc je veux {ProductRowID} et {ProductName}

Voici mon code à ce jour:

Dim r As Regex = New Regex("{\w*}", RegexOptions.IgnoreCase) 
Dim m As Match = r.Match("<a href='/Product/Show/{ProductRowID}'>{ProductName}</a>") 

est mon modèle de RegEx correct? Comment puis-je faire défiler les valeurs correspondantes? J'ai l'impression que ça devrait être super facile mais j'ai été perplexe ce matin!

+1

[Méfiez-vous des Zalgo] (http://stackoverflow.com/a/1732454/135078) –

Répondre

3

Votre modèle manque un petit détail:

\{\w*?\} 

accolades doivent être échappés, et que vous voulez l'étoile non gourmand, ou votre premier (et seul) match sera la suivante: "{ProductRowID}'>{ProductName}".

Dim r As Regex = New Regex("\{\w*?\}") 
Dim input As String = "<a href='/Product/Show/{ProductRowID}'>{ProductName}</a>" 
Dim mc As MatchCollection = Regex.Matches(input, r) 
For Each m As Match In mc 
    MsgBox.Show(m.ToString()) 
Next m 

RegexOptions.IgnoreCase n'est pas nécessaire, parce que ce regex particulier n'est pas sensible à la casse de toute façon.

1

Modifiez votre modèle RegEx à \{\w*\} puis il correspondra comme prévu. Vous pouvez tester avec un online .net RegEx tester.

+0

Le site référencé est en panne. – mmcglynn

+1

Ok, en voici une autre: http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx – RickL

2

Vous pouvez simplement regrouper vos matchs en utilisant une expression régulière comme suit:

<a href='/Product/Show/(.+)'\>(.+)</a> 

De cette façon vous avez 1 $ et 2 $ correspondant aux valeurs que vous souhaitez obtenir.

Vous aussi donnez un nom à vos matchs afin qu'ils ne sont pas anonymes/position orientée pour la recherche:

<a href='/Product/Show/(?<rowid>.+)'\>(?<name>.+)</a> 
Questions connexes