.net - test - ¿Expresión regular para analizar enlaces desde una página web?
regex test javascript (9)
Esto capturará las URL de todas las etiquetas, siempre que el autor de las comillas usadas en HTML:
<a[^>]+href="([^"]+)"[^>]*>
Hice un ejemplo aquí .
Estoy buscando una expresión regular .NET extraer todas las direcciones URL de una página web, pero no he encontrado una que sea lo suficientemente amplia como para cubrir todas las formas diferentes en que puede especificar un enlace.
Y una pregunta secundaria:
¿Hay ''una expresión regular para gobernarlos a todos''? ¿O es mejor usar una serie de expresiones regulares menos complicadas y simplemente usar pases mutliple contra el HTML sin procesar? (Velocidad vs. Mantenibilidad)
Mira la especificación de URI. Eso podría ayudarte mucho. Y en lo que respecta al rendimiento, puedes extraer prácticamente todos los enlaces HTTP en una página web modesta. Cuando digo modesto, definitivamente no me refiero a una página que abarque todos los manuales HTML como el del manual de ELisp. También el rendimiento es un tema delicado. Mi consejo sería medir tu rendimiento y luego decidir si vas a extraer todos los enlaces con una sola expresión regular o con expresiones regex más simples.
No tengo tiempo para tratar de pensar en una expresión regular que probablemente no funcionará, pero quería comentar que definitivamente debes dividir tu expresión regular, al menos si llega a este nivel de fealdad :
(?:(?:/r/n)?[ /t])*(?:(?:(?:[^()<>@,;://"./[/] /000-/031]+(?:(?:(?:/r/n)?[ /t]
)+|/Z|(?=[/["()<>@,;://"./[/]]))|"(?:[^/"/r//]|//.|(?:(?:/r/n)?[ /t]))*"(?:(?:
/r/n)?[ /t])*)(?:/.(?:(?:/r/n)?[ /t])*(?:[^()<>@,;://"./[/] /000-/031]+(?:(?:(
?:/r/n)?[ /t])+|/Z|(?=[/["()<>@,;://"./[/]]))|"(?:[^/"/r//]|//.|(?:(?:/r/n)?[
/t]))*"(?:(?:/r/n)?[ /t])*))*@(?:(?:/r/n)?[ /t])*(?:[^()<>@,;://"./[/] /000-/0
....*SNIP*....
*))*@(?:(?:/r/n)?[ /t])*(?:[^()<>@,;://"./[/] /000-/031]+(?:(?:(?:/r/n)?[ /t])
+|/Z|(?=[/["()<>@,;://"./[/]]))|/[([^/[/]/r//]|//.)*/](?:(?:/r/n)?[ /t])*)(?:/
.(?:(?:/r/n)?[ /t])*(?:[^()<>@,;://"./[/] /000-/031]+(?:(?:(?:/r/n)?[ /t])+|/Z
|(?=[/["()<>@,;://"./[/]]))|/[([^/[/]/r//]|//.)*/](?:(?:/r/n)?[ /t])*))*/>(?:(
?:/r/n)?[ /t])*))*)?;/s*)
(esto supuestamente coincide con las direcciones de correo electrónico)
Editar: Ni siquiera puedo ponerlo en una publicación, es tan desagradable ...
Todos los HTTP y MAILTO
(["''])(mailto:|http:).*?/1
Todos los enlaces, incluidos los relativos, llamados por href o src.
#Matches things in single or double quotes, but not the quotes themselves
(?<=(["'']))((?<=href=[''"])|(?<=src=[''"])).*?(?=/1)
#Maches thing in either double or single quotes, including the quotes.
(["''])((?<=href=")|(?<=src=")).*?/1
Sin embargo, el segundo solo obtendrá enlaces que usan comillas dobles.
Con Html Agility Pack , puede usar:
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
Response.Write(link["href"].Value;
}
doc.Save("file.htm");
URL''s? Como en images / scripts / css / etc.?
%href="(.["]*)"%
de la biblioteca RegexBuddy:
URL: Buscar en texto completo
La clase de caracteres final se asegura de que si una URL es parte de algún texto, la puntuación como una coma o punto final después de que la URL no se interprete como parte de la URL.
/b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]
de acuerdo con http://tools.ietf.org/html/rfc3986
Extrayendo URL de CUALQUIER texto (no solo HTML)
(http//://[:/?#//[//]@!%$&''()*+,;=a-zA-Z0-9._//-~]+)
((mailto: | (noticias | (ht | f) tp (s?)): //) {1} / S +)
Tomé esto de regexlib.com
[Nota del editor: el {1} no tiene una función real en esta expresión regular; ver esta publicación ]