Как мне найти все руководства в каком-то тексте? - PullRequest
4 голосов
/ 13 марта 2009

В моей базе данных есть куча веб-страниц со ссылками, подобными этим:

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

Этот уникальный идентификатор Guid является идентификатором другой страницы в той же базе данных.

Я хочу сканировать эти страницы и проверять наличие битых ссылок.

Для этого мне нужна функция, которая может возвращать список всех направляющих на странице:

Function FindGuids(ByVal Text As String) As Collections.Generic.List(Of Guid)
    ...
End Function

Я полагаю, что это работа для регулярного выражения. Но я не знаю синтаксис.

Ответы [ 4 ]

8 голосов
/ 13 марта 2009
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
8 голосов
/ 13 марта 2009

[0-9a-е] {8} - [0-9a-е] {4} - [0-9a-е] {4} - [0-9a-е] {4} - [0- 9а-е] {12}

3 голосов
/ 13 марта 2009

Предлагаем вам взять бесплатную копию 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})

Тогда вам просто нужно пройтись по соответствующим группам ...

2 голосов
/ 13 марта 2009

Есть более простые способы проверить наличие неработающих ссылок .... например, я думаю 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;

}

...