Pregunta

Tengo un montón de contenido de páginas web en mi base de datos con enlaces como este:

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

Ese identificador único Guid es el ID de otra página en la misma base de datos.

Me gustaría rastrear esas páginas y buscar enlaces rotos.

Para hacer eso, necesito una función que pueda devolver una lista de todos los Guías en una página:

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

Calculo que este es un trabajo para una expresión regular. Pero no sé la sintaxis.

¿Fue útil?

Solución

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

Otros consejos

  

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

Le sugiero que obtenga una copia gratuita de expresso y aprenda a construirlos.

Aquí hay un intento de 10 segundos sin optimización, comprueba mayúsculas y minúsculas y crea un grupo de captura numerado:

([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})

Entonces solo tiene que recorrer los grupos coincidentes ...

Hay formas más fáciles de verificar si hay enlaces rotos ... por ejemplo, creo que http: //www.totalvalidator .com / lo hará: D

Esto también podría ayudar

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}
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;
quot;, RegexOptions.Compiled);

y luego

<*>

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top