Как я могу найти все идентификаторы Guid в каком-то тексте?
Вопрос
У меня есть куча содержимого веб-страницы в моей базе данных со ссылками, подобными этой:
<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;
}