【发布时间】:2016-11-09 06:16:05
【问题描述】:
输入字符串为:
<input type="hidden" name="locale" value="us">
正则表达式模式是:
Dim r As New Regex("<input\s{0,}(?:(name|type|value)=""([^""]+)""\s{0,})+>")
正在使用的代码:
If r.IsMatch(s) Then
For Each m As Match In r.Matches(s)
Debug.Print(m.ToString)
For i As Integer = 0 To m.Groups.Count - 1
Debug.Print(New String(" "c, i + 1) & "-" & m.Groups(i).Value)
Next
Next
End If
输出:
<input type="hidden" name="locale" value="us">
-<input type="hidden" name="locale" value="us">
-value
-us
我希望它匹配:
-type
-hidden
-name
-locale
-value
-us
使用的备用模式按提供的顺序排列,也许这就是为什么它只吐出一组,即最后一个匹配。
【问题讨论】:
-
我以前听过类似的争议。仅仅因为这很困难,我拒绝相信没有一个正则表达式迷可以解决这个问题。
-
这不是困难的问题:HTML是如此复杂,以至于正确的正则表达式会巨大 .
-
我只想匹配这个字符串,而不是整个 HTML 页面。为了帮助您的观点,我知道这可以很容易地使用 .IndexOf 和 .Substring 等解析出来。
-
是的。然后它将引号更改为
'。或者在=周围添加一些空格。或者出现一个无价值的属性。你知道我要去哪里吗?