RegEx匹配文本和括号

时间:2008-11-28 14:54:28

标签: regex vb.net

我需要在所有匹配项中循环说出以下字符串:

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

我希望捕获包含它们的{}中的值,因此我想要{ProductRowID}和{ProductName}

到目前为止,这是我的代码:

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

我的RegEx模式是否正确?如何循环匹配的值?我觉得这应该是非常容易的,但今天早上我被困在这上面了!

3 个答案:

答案 0 :(得分:3)

你的模式缺少一个小细节:

\{\w*?\}

必须转义大括号,你想要非贪婪的明星,或者你的第一个(也是唯一的)匹配是:"{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不需要,因为这个特殊的正则表达式无论如何都不区分大小写。

答案 1 :(得分:2)

您可以使用以下正则表达式对匹配进行分组:

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

通过这种方式,您可以获得1美元和2美元的匹配值。

您还要提供您的匹配名称,以便它们不是匿名/位置导向检索:

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

答案 2 :(得分:1)

将您的RegEx模式更改为\{\w*\},然后它会按预期匹配。

您可以使用online .net RegEx tester进行测试。