문제

웹페이지에서 모든 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://gbiv.com/protocols/uri/rfc/rfc3986.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*)

(아마도 이메일 주소와 일치할 것입니다)

편집하다:한 포스팅에 다 담을 수도 없고 너무 촌스러워요....

HTML 작성자가 인용문을 사용하는 한 모든 태그에서 URL을 캡처합니다.

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

예시를 만들어 봤습니다 여기.

URL은?이미지/스크립트/css/등에서와 같이?

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

~에 따르면 http://tools.ietf.org/html/rfc3986

HTML뿐만 아니라 모든 텍스트에서 URL 추출

(http\\://[:/?#\\[\\]@!%$&'()*+,;=a-zA-Z0-9._\\-~]+)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top