문제
웹페이지에서 모든 URL을 추출하는 .NET 정규식을 찾고 있지만 링크를 지정할 수 있는 다양한 방법을 모두 포괄할 만큼 포괄적인 정규식을 찾지 못했습니다.
그리고 부가적인 질문:
거기에 있습니까? 모두를 지배하는 하나의 정규식?아니면 일련의 덜 복잡한 정규 표현식을 사용하고 원시 HTML에 대해 다중 패스를 사용하는 것이 더 나을까요?(속도 대유지보수성)
해결책
((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)
나는 이것을 다음에서 가져왔다. regexlib.com
[편집자 주:이 정규식에서는 {1}에 실제 기능이 없습니다. 이 게시물을 참조하세요]
다른 팁
RegexBuddy 라이브러리에서:
URL:전문으로 찾기
최종 문자 클래스는 URL이 일부 텍스트의 일부인 경우 URL 뒤의 쉼표나 마침표와 같은 구두점이 URL의 일부로 해석되지 않도록 합니다.
\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]
와 함께 HTML 민첩성 팩, 당신이 사용할 수있는:
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");
URI 사양을 살펴보세요.그것은 당신에게 많은 도움이 될 수 있습니다.그리고 성능에 관한 한, 적당한 웹 페이지에서 모든 HTTP 링크를 거의 추출할 수 있습니다.내가 겸손하다고 말할 때 ELisp 매뉴얼과 같은 HTML 매뉴얼을 모두 포함하는 한 페이지를 의미하는 것은 아닙니다.또한 성능은 민감한 주제입니다.내 조언은 성능을 측정한 다음 하나의 단일 정규 표현식을 사용하여 모든 링크를 추출할지 아니면 여러 개의 간단한 정규 표현식을 사용하여 추출할지 결정하는 것입니다.
모든 HTTP 및 MAILTO
(["'])(mailto:|http:).*?\1
href 또는 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
그러나 두 번째는 큰따옴표를 사용하는 링크만 가져옵니다.
아마 작동하지 않을 정규 표현식을 생각해 볼 시간은 없지만, 적어도 작동하지 않을 경우 정규 표현식을 가장 확실하게 분리해야 한다는 점을 말씀드리고 싶었습니다. 이 정도의 추악함:
(?:(?:\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*)
(아마도 이메일 주소와 일치할 것입니다)
편집하다:한 포스팅에 다 담을 수도 없고 너무 촌스러워요....
URL은?이미지/스크립트/css/등에서와 같이?
%href="(.["]*)"%
~에 따르면 http://tools.ietf.org/html/rfc3986
HTML뿐만 아니라 모든 텍스트에서 URL 추출
(http\\://[:/?#\\[\\]@!%$&'()*+,;=a-zA-Z0-9._\\-~]+)