Как я могу найти все идентификаторы Guid в каком-то тексте?

StackOverflow https://stackoverflow.com/questions/644504

  •  22-07-2019
  •  | 
  •  

Вопрос

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

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

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

Я бы хотел просканировать эти страницы и проверить, нет ли неработающих ссылок.

Чтобы сделать это, мне нужна функция, которая может возвращать список всех идентификаторов Guid на странице:

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top