我只是想说我是VB.Net用户并且我知道关于HTML和正则表达式的所有问题。这仅仅是为了我自己的学习,所以请不要建议其他方法。
现在是HTML
<td class="alt1 username"><a href="member.php?123-Stack" class="username">Stack</a>
<td class="alt1 username"><a href="member.php?456-Overflow" class="username"><font color="#FF0000"><strong>Overflow</strong></font></a>
现在您可以看到可选的字体和字符串标记。我当前的模式将捕获第一个示例罚款,但也包括可选标签。我知道为什么我的模式失败只是不确定如何包含可选标签。也许这不可能?
(?<=<a href=""member\.php\?\d+\-.+?"" class=""username"">).+?(?=</a>)
一如既往地谢谢
答案 0 :(得分:0)
在不区分大小写的模式下使用它:
[^<>]+(?=(?:\s*</(?!a>)[^>]*>)*\s*</a>)
查看the regex demo中的匹配项。
获取VB.NET中的所有匹配项:
Dim ResultList As StringCollection = New StringCollection()
Try
Dim RegexObj As New Regex("[^<>]+(?=(?:</(?!a>)[^>]*>)*</a>)", RegexOptions.IgnoreCase)
Dim MatchResult As Match = RegexObj.Match(SubjectString)
While MatchResult.Success
ResultList.Add(MatchResult.Value)
MatchResult = MatchResult.NextMatch()
End While
Catch ex As ArgumentException
'Syntax error in the regular expression
End Try
<强>解释强>
[^<>]+
匹配既不是<
也不是>
的字符(这是您的匹配)(?=(?:</(?!a>)[^>]*>)*</a>)
声称接下来是...... (?:</(?!a>)[^>]*>)*
零个或多个不是</a>
的标记,即</
后面没有a>
,然后是非>
个字符,然后是{{ 1}} >
扩展规范
如果您希望正则表达式只在类</a>
出现时匹配,请改用:
username