2009-08-22 2 views
3

URL과 일치하는 많은 정규 표현식이 있습니다. 그러나 <a> 하이퍼 링크 태그 (HREF, 내부 값 등) 내의 아무 곳에 나 나타나지 않는 URL을 찾으려고합니다. 그래서 이들의 URL 하나도 일치하지해야합니다하이퍼 링크 안에없는 URL을 찾는 정규 표현식

 
<a href="http://www.example.com/">something</a> 
<a href="http://www.example.com/">http://www.example2.com</a> 
<a href="http://www.example.com/"><b>something</b>http://www.example.com/<span>test</span></a> 

<a></a> 이외의 모든 URL이 일치되어야한다.

URL의 첫 번째 <a> 태그가 오프닝 <a> 또는 닫는 </a>인지 여부를 확인하기 위해 부정적인 미리보기를 사용했습니다. 그것이 닫는 </a>이면 URL은 하이퍼 링크 안에 있어야합니다. 나는이 아이디어가 괜찮다고 생각하지만, 제외 lookahead 정규 표현식이 작동하지 않는다 (또는 더 정확하게, 정규 표현식이 올바르게 쓰여지지 않았다). 모든 팁은 매우 감사하겠습니다.

+0

플랫폼은 무엇입니까? Perl, .NET 또는 Java? –

+0

가능한 중복 [하이퍼 링크에 텍스트를 래핑하는 방법 (하이퍼 링크에 아직 래핑되지 않은 경우에만)] (http://stackoverflow.com/questions/1191637/how-to-wrap-text-in-a-hyperlink -only-it-itnt-already-wrapped-in-a-hyperlink) – tchrist

답변

2

대신 하나의 정규 표현식을 마련하기 위해 노력하는 두 단계를 수행 할 수 있습니다

  1. 혼합 출력 (아무것도 교체)가 HTML 앵커 부분 (전체 앵커 태그 : 태그를 열고, 내용 및 마감 태그).

  2. 일치하는 URL 펄에서

그것은있을 수 :

my $curLine = $_; #Do not change $_ if it is needed for something else. 
$curLine =~ /<a[^<]+<\/a>//g; #Remove all of HTML anchor tag, "<a", "</a>" and everything in between. 
if ($curLine =~ /http:\/\//) 
{ 
    print "Matched an URL outside a HTML anchor !: $_\n"; 
} 
+0

HTML 앵커를 제거 (블렌드 아웃)하면 원래 URL이 하이퍼 링크 내부에 있는지 확인할 수 없습니다. 하이퍼 링크 태그 외부에있는 URL 만 찾고 있습니다. –

+0

의미 : 여는 앵커 태그에서 닫는 앵커 태그까지 * 모든 것을 * 제거합니다. –

+0

아, 좋은 해결책. 나는 그것을 작동 시켰어. 처음에는 시작 태그와 종료 태그를 제거하겠다고 생각했지만 전체 태그를 제거하는 것이 트릭입니다. 고맙습니다!! –

0

당신이 할 수있는 앵커 태그와 하이퍼 링크 모두 일치하는 하나의 정규 표현식 사용 :

# Note that this is a dummy, you'll need a more sophisticated URL regex 
regex = '(<a[^>]+>)|(http://.*)' 

그런 다음 결과를 반복하고 두 번째 하위 패턴이있는 부분 만 처리합니다.

+0

@Svante : 먼저 예제를 확장하여 및의 모든 항목과 일치시킬 수 있습니다. 그런 다음 허용 된 대답과 동일하게, 단 한번의 패스로 만 수행됩니다. 둘째, "HTML"문자열의 발생을 기반으로 일반적인 언어 이외의 구문을 분석하지 않습니다. 원하는 모든 것이 문자열에서 간단한 패턴을 찾는다면 완전한 기능을 갖춘 HTML 파서를 사용할 필요가 없습니다. –

0

베드로는 좋은 해답이 있습니다

http://a.net 
0

사용 :

Some text <a href="http://page.net">TeXt</a> and some more text with link http://a.net 

다음 URL을 찾는 정규 표현식을 실행

Some text and some more text with link http://a.net 

로 대체되도록 첫째, 앵커를 제거 DOM을 사용하여 앵커 요소를 필터링 한 다음 나머지 URL에 간단한 URL 정규식을 수행합니다.