문제

씨#:하이퍼링크와 해당 설명을 구문 분석하는 데 좋은 Regex는 무엇입니까?

HREF 태그 주위에 대소문자 구분, 공백 및 작은따옴표(큰따옴표 대신) 사용을 고려하십시오.

또한 <a> 다음과 같은 태그 <b> 그리고 <i>. ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

도움이 되었습니까?

해결책

중첩된 태그가 없고 줄 바꿈도 없는 한 다음 변형이 잘 작동합니다.

<a\s+href=(?:"([^"]+)"|'([^']+)').*?>(.*?)</a>

중첩된 태그가 작동하게 되면 정규식은 구문 분석에 적합하지 않게 됩니다.그러나 정규식 기계에 따라 최신 통역사의 고급 기능을 적용하여 계속 사용할 수 있습니다.예:.NET 정규식은 스택을 사용합니다.나는 이것을 찾았다:

(?:<a.*?href=[""'](?<url>.*?)[""'].*?>)(?<name>(?><a[^<]*>(?<DEPTH>)|</a>(?<-DEPTH>)|.)+)(?(DEPTH)(?!))(?:</a>) 

원천: http://weblogs.asp.net/scottcate/archive/2004/12/13/281955.aspx

다른 팁

다음 예제를 참조하세요. 스택 오버플로:웹페이지의 링크를 구문 분석하는 정규식?

사용 HTML 민첩성 팩 깨진 정규식 대신 HTML의 의미를 사용하여 HTML을 구문 분석하고 세부 정보를 추출할 수 있습니다.

나는 이것을 찾았다 하지만 분명히 이 녀석 그것에 몇 가지 문제가 있었습니다.

편집하다: (효과가있다!)
이제 자체 테스트를 수행한 결과 작동한다는 것을 확인했습니다. C#을 모르기 때문에 C#에 대한 답변을 드릴 수는 없지만 PHP는 알고 있으며 여기에 실행하여 얻은 일치 배열이 있습니다.

<a href="pages/index.php" title="the title">Text</a>

array(3) { [0]=> string(52) "Text" [1]=> string(15) "pages/index.php" [2]=> string(4) "Text" } 

정규식을 가지고 대부분의 경우를 처리하지만 여러 줄 주석 내에서 HTML과 일치한다고 생각합니다.

.NET 구문을 사용하여 작성되었지만 쉽게 번역할 수 있어야 합니다.

이제 이 코드 조각을 작동시키겠습니다. 이것은 이전에 제안한 것보다 덜 탐욕스러운 버전입니다.입력에 여러 개의 하이퍼링크가 있으면 원본이 작동하지 않습니다.아래 코드를 사용하면 모든 하이퍼링크를 반복할 수 있습니다.

static Regex rHref = new Regex(@"<a.*?href=[""'](?<url>[^""^']+[.]*?)[""'].*?>(?<keywords>[^<]+[.]*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public void ParseHyperlinks(string html)
{
   MatchCollection mcHref = rHref.Matches(html);

   foreach (Match m in mcHref)
      AddKeywordLink(m.Groups["keywords"].Value, m.Groups["url"].Value);
}

다음은 균형 잡힌 태그와 일치하는 정규식입니다.

(?:""'[""'].*?>)(?(?>(?)|(?<-DEPTH>)|.)+)(?(DEPTH)(?!))(?: )

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top