¿Cómo puedo encontrar todas las guías en algún texto?
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.
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
<*>}