Мне нужно перебрать все совпадения, скажем, в следующей строке:
<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? Как просмотреть совпадающие значения в цикле? Я чувствую, что это должно быть очень просто, но сегодня утром я был в тупике!





Измените свой шаблон RegEx на \{\w*\}, тогда он будет соответствовать вашим ожиданиям.
Вы можете проверить это с помощью онлайн-тестер .net RegEx.
Хорошо, вот еще один: derekslager.com/blog/posts/2007/09/…
В вашем шаблоне отсутствует небольшая деталь:
\{\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 не нужен, потому что это конкретное регулярное выражение в любом случае не чувствительно к регистру.
Вы можете просто сгруппировать свои совпадения, используя следующее регулярное выражение:
<a href='/Product/Show/(.+)'\>(.+)</a>
Таким образом, у вас есть 1 и 2 доллара, соответствующие значениям, которые вы хотите получить.
Вы также даете имена своим совпадениям, чтобы они не были анонимными / позиционно-ориентированными для поиска:
<a href='/Product/Show/(?<rowid>.+)'\>(?<name>.+)</a>