정규표현식(Regular Expression) Href URL 캡쳐(Capture)
참고 주소
http://hoons.kr/Board.aspx?Name=QACSHAP&Mode=2&BoardIdx=20596&Key=&Value=
http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=32231
이 글은 먼저 훈스닷넷(hoons.kr)에 질문으로 올라온 글 덕에 작성해본 코드이고요.
정규표현식(Regular Expression)을 이용해 HTML의 링크에 해당하는 <a href="..." 형태의 URL 부분만 받아오도록 처리하는 방법을 아래 코드로 요약해봅니다.
자세한 주석의 설명은 없지만, () 괄호로 구분되는 정규표현식 테그로 치환되는 값들을 유심히 살펴보시면 됩니다.
주석에 나와 있는 숫자 설명은
붉은색으로 강조해 둔 부분에 들어갈 값을 설명한 내용이에요~
(PS. 첨부된 파일은 테스트용 전체 소스에요)
/// <summary>
/// URL을 뽑아온다
/// 0:Link
/// 1:host.domain (FQDN)
/// 2:protocol
/// 3:domain extension (.net, .co.kr, .com ...)
/// 4:port
/// </summary>
/// <param name="strHtml"></param>
/// <returns></returns>
private List<string> GetHrefs(string strHtml)
{
List<string> urlList = new List<string>();
Regex r;
Match m;
// ref. url http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=32231
string pattern = string.Empty;
pattern += @"((http|https|ftp|mms):\/\/[0-9a-z-]+(\.[_0-9a-z-]+)+(:[0-9]{2,4})?\/?)"; // domain+port
pattern += @"([\.~_0-9a-z-]+\/?)*"; // sub roots or sub directory
pattern += @"(\S+\.[_0-9a-z]+\??)?"; // file & extension string
pattern += @"([_0-9a-z#&=-]+)*"; // parameter
r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
for (m = r.Match(strHtml); m.Success; m = m.NextMatch())
{
if (string.IsNullOrEmpty(m.Groups[0].Value))
continue;
urlList.Add(m.Groups[0].Value);
}
return urlList;
}
댓글
이 글 공유하기
다른 글
-
훈스 C# 스터디 5주차 - CLR의 동작 , 메모리 관리, Boxing, UnBoxing, Generic
훈스 C# 스터디 5주차 - CLR의 동작 , 메모리 관리, Boxing, UnBoxing, Generic
2009.03.11 -
Different with ArrayList, List<T> – Boxing, None Boxing
Different with ArrayList, List<T> – Boxing, None Boxing
2009.03.10 -
여러줄을 한번에 StringBuilder로 감싸는 방법~! - Editplus 정규표현식, 바꾸기 기능
여러줄을 한번에 StringBuilder로 감싸는 방법~! - Editplus 정규표현식, 바꾸기 기능
2009.02.26 -
[Hoons C# 스터디 2009 1기] 3주차 세미나 / 발표 내용 정리
[Hoons C# 스터디 2009 1기] 3주차 세미나 / 발표 내용 정리
2009.02.25