4

我的数据库中有一堆网页内容,链接如下:

<a href="/11ecfdc5-d28d-4121-b1c9-1f898ac0b72e">Link</a>

该 Guid 唯一标识符是同一数据库中另一个页面的 ID。

我想抓取这些页面并检查是否有损坏的链接。

为此,我需要一个可以返回页面上所有 Guid 列表的函数:

函数 FindGuids(ByVal Text As String) As Collections.Generic.List(Of Guid)
    ...
结束功能

我认为这是正则表达式的工作。但是,我不知道语法。

4

4 回答 4

8

[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f ]{12}

于 2009-03-13T20:30:53.513 回答
8
函数 FindGuids(ByVal Text As String) As List(Of Guid)
    Dim Guids 作为新列表(Guid)
    暗模式作为字符串 = "[a-fA-F0-9]{8}-([a-fA-F0-9]{4}-){3}[a-fA-F0-9]{12}"
    对于每个 m 作为 Regex.Matches(Text, Pattern) 中的匹配项
        Guids.Add(新的 Guid(m.Value))
    下一个
    返回指南
结束功能
于 2009-03-13T20:39:28.830 回答
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})

然后你只需要遍历匹配的组......

于 2009-03-13T20:33:36.673 回答
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;

}

于 2009-03-13T20:29:01.990 回答