2011-04-01 4 views
0

rel = "nofollow"이 아닌 텍스트에서 링크를 추출하는 정규식을 작성하려고합니다.지정한 속성으로 링크를 추출하기위한 정규식

예 :

aiusdiua asudauih <a rel="nofollow" hre="http://uashiuadha.asudh/adas>adsaag</a> uhwaida <br> asdgydug <a href="http://asdha.sda/uduih/dufhuis>aguuia</a>

감사합니다!

+0

... 정규식 대신 파서를 사용할 수있는 가능성이 있습니까? – jensgram

+0

아니오 정규식으로 만들기를 원합니다 –

답변

2

다음 정규식 일을 할 것입니다 :

<a (?![^>]*?rel="nofollow")[^>]*?href="(.*?)" 

원하는 URL이 캡처 그룹 # 1에 있습니다. 예 : 루비에는 다음과 같습니다

if input =~ /<a (?![^>]*?rel="nofollow")[^>]*?href="(.*?)"/ 
    match = $~[1] 
end 

을가 부정적 예측, href 또는 rel 전에 올 수 있습니다 무엇에 rel 이전 [^>]*?을 받아들입니다. hrefrel 이후에 오면 물론 괜찮습니다.

+0

정규식 사용 경험. *.을 사용하면서 항상주의해야합니다. – CodeWrite

+0

@regexhacks :'. *? '를 사용할 때 왜주의해야합니까? –

+0

@regexhacks 동의합니다. 아무것도 허용하지 않거나 무제한 인 모든 한정 기호에주의해야합니다. –

0

시도 <(?:A|AREA)\b[^<>]*?(?!rel="nofollow")[^<>]*?href=['"]([^>"]*)[^>]*?>

는 .NET 정규식을 사용하는 경우 다음

<(?:A|AREA)\b[^<>]*?(?!rel="nofollow")[^<>]*?href=['"](?<URL>[^>"]*)[^>]*?> 

데이터가 URL라는 이름의 그룹에있다이 또는 그룹 1

+0

이 답변에 대한 두 가지 문제를 수정해야한다고 생각합니다 : 1) 지금은 실제로 'rel = "nofollow"'가있는 문자열을 찾을 수 있지만 그 질문은 반대 . 2)'a' 태그에서'href'가'rel'보다 먼저 나오면 일치하지 않습니다. –

관련 문제