我的数据库中有一堆网页内容,其中包含以下链接:
<a href="/11ecfdc5-d28d-4121-b1c9-1f898ac0b72e">Link</a>
该Guid唯一标识符是同一数据库中另一个页面的ID。
我想抓取这些网页并检查链接是否损坏。
为此,我需要一个可以返回页面上所有Guid列表的函数:
Function FindGuids(ByVal Text As String) As Collections.Generic.List(Of Guid) ... End Function
我认为这是正则表达式的工作。但是,我不知道语法。
答案 0 :(得分:8)
[0-9A-F] {8} - [0-9A-F] {4} - [0-9A-F] {4} - [0-9A-F] {4} - [O-图9a-F] {12}
答案 1 :(得分:8)
Function FindGuids(ByVal Text As String) As List(Of Guid) Dim Guids As New List(Of Guid) Dim Pattern As String = "[a-fA-F0-9]{8}-([a-fA-F0-9]{4}-){3}[a-fA-F0-9]{12}" For Each m As Match In Regex.Matches(Text, Pattern) Guids.Add(New Guid(m.Value)) Next Return Guids End Function
答案 2 :(得分:3)
建议您获取expresso的免费副本并学习构建它们!
这是一次没有优化的10秒尝试,检查大小写并创建一个编号的捕获组:
([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})
然后你只需要遍历匹配的组......
答案 3 :(得分:2)
有更简单的方法来检查损坏的链接....例如,我认为http://www.totalvalidator.com/会这样做:D
这也可以帮助
static Regex isGuid =
new Regex(@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$", RegexOptions.Compiled);
然后
static bool IsGuid(string candidate, out Guid output)
{
bool isValid = false;
output=Guid.Empty;
if(candidate!=null)
{
if (isGuid.IsMatch(candidate))
{
output=new Guid(candidate);
isValid = true;
}
}
return isValid;
}