Regulární výraz pro analýzu odkazů z webové stránky?

hlasů
14

Sháním .NET regulární výraz získat všechny adresy URL z webové stránky, ale nenašel, kdo být dostatečně komplexní, aby pokrýt všechny různé způsoby, jak můžete zadat odkaz.

A boční otázka:

Je tam jeden regex vládne všem ? Nebo jsem lépe za použití řady méně složitých regulárních výrazů a jen za použití zahrnuje více projde proti surovým HTML? (Speed vs. udržovatelnost)

Položena 08/08/2008 v 18:24
zdroj uživatelem
V jiných jazycích...                            


9 odpovědí

hlasů
11

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

Vzal jsem to od regexlib.com

[pozn: na {1} nemá žádné skutečné funkci v tomto regex; viz tento příspěvek ]

Odpovězeno 08/08/2008 v 18:32
zdroj uživatelem

hlasů
8

z knihovny RegexBuddy:

URL: Najít v plném znění

Konečný třída znaků je zajištěno, že v případě, že adresa URL je součástí nějakého textu, interpunkce, jako je například čárka nebo tečka po URL není interpretovat jako součást URL.

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

Odpovězeno 17/08/2008 v 04:00
zdroj uživatelem

hlasů
4

S HTML Agility balíčku , můžete použít:

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");
Odpovězeno 17/08/2008 v 02:08
zdroj uživatelem

hlasů
2

email v veškerého HTTP je

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

Všechny odkazy, včetně těch příbuzný, které se nazývají překlad nebo 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

Druhý dostanete pouze odkazy, které používají uvozovek, nicméně.

Odpovězeno 08/08/2008 v 18:52
zdroj uživatelem

hlasů
2

Podívejte se na specifikaci URI. Který vám může pomoci hodně. A pokud jde o výkon jde, můžete do značné míry extrahovat všechny odkazy HTTP ve skromném webové stránky. Když řeknu, že skromný já rozhodně nemám na mysli jednu stranu všezahrnující HTML příručky, jako je tomu Elisp manuálu. Také výkon je citlivý téma. Moje rada by se měřit svůj výkon a pak se rozhodnout, jestli budete získat všechny odkazy pomocí jediného regex nebo s několika jednodušších Regex výrazy.

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

Odpovězeno 08/08/2008 v 18:29
zdroj uživatelem

hlasů
1

Nemám čas, aby se pokusila přemýšlet o regulární výraz, který pravděpodobně nebude fungovat, ale chtěl jsem, aby se vyjádřil, že byste měli určitě rozbít svůj regulární výraz, alespoň pokud se dostane do této úrovně ošklivosti :

(?:(?:\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*)

(To prý odpovídá e-mailové adresy)

Edit: Nemohu dokonce vejde na jedno pracovní místo je tak ošklivý ....

Odpovězeno 08/08/2008 v 18:32
zdroj uživatelem

hlasů
0

podle http://tools.ietf.org/html/rfc3986

extrahování URL z libovolného textu (nejen HTML)

(http\\://[:/?#\\[\\]@!%$&'()*+,;=a-zA-Z0-9._\\-~]+)
Odpovězeno 05/09/2012 v 17:14
zdroj uživatelem

hlasů
0

To bude zachycovat adresy URL ze všech několika značek, pokud autor HTML použity citace:

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

Udělal jsem příklad zde .

Odpovězeno 08/08/2008 v 18:31
zdroj uživatelem

hlasů
0

URL? Stejně jako v images / scripts / CSS / etc.?

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

Odpovězeno 08/08/2008 v 18:29
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more