Pregunta

Estoy buscando una .NETO de la expresión regular de extraer todas las direcciones Url de una página web, pero no he encontrado uno que sea lo suficientemente amplio como para cubrir todas las maneras diferentes que usted puede especificar un enlace.

Y una pregunta:

Hay una expresión regular para gobernarlos a todos?O soy yo mejor usar una serie de menos complicado expresiones regulares y sólo el uso de múltiples pases en contra de la raw HTML?(Velocidad vsMantenibilidad)

¿Fue útil?

Solución

((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)

Tomé esta de regexlib.com

[nota del editor:el {1} tiene ninguna función real de esta expresión; ver este post]

Otros consejos

desde el RegexBuddy de la biblioteca:

URL:Buscar en el texto completo

El carácter final de la clase se asegura de que si una URL es parte de un texto, los signos de puntuación como la coma o un punto después de la dirección URL no es interpretado como parte de la URL.

\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]

Con Html Agilidad Pack, puede utilizar:

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");

Buscar en la URI de la especificación.Que puede ayudar mucho.Y en cuanto a rendimiento va, prácticamente se puede extraer todos los enlaces HTTP en una modesta página web.Cuando digo modesto definitivamente no significa que una página que abarca todos los manuales en formato HTML como el de ELisp manual.También el rendimiento es un delicado tema.Mi consejo sería para medir su rendimiento y, a continuación, decidir si se va a extraer todos los enlaces de una sola expresión regular, o con varios más simples expresiones regulares las expresiones.

http://gbiv.com/protocols/uri/rfc/rfc3986.html

Todos los HTTP y MAILTO del

(["'])(mailto:|http:).*?\1

Todos los vínculos, incluidos los relativos, a los que llama 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

El segundo sólo puede vínculos que utilizan comillas dobles, sin embargo.

No tengo tiempo para probar y pensar de una expresion regular que probablemente no funcionaría, pero quería comentar que usted definitivamente debe romper su expresión regular, al menos si se pone 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*)

(se supone que esto coincide con las direcciones de correo electrónico)

Editar:Ni siquiera puedo caber en un solo post es tan desagradable....

De esta forma podrá capturar las direcciones Url de todos los tags siempre como el autor de el HTML que se usa comillas:

<a[^>]+href="([^"]+)"[^>]*>

He hecho un ejemplo aquí.

URL?Como en imágenes/scripts/css/etc.?

%href="(.["]*)"%

de acuerdo a http://tools.ietf.org/html/rfc3986

la extracción de url de CUALQUIER texto (no sólo HTML)

(http\\://[:/?#\\[\\]@!%$&'()*+,;=a-zA-Z0-9._\\-~]+)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top