2011-11-14 2 views
-1

로 이스케이프 HTML 태그를 포함하여 내가이 문자열이 있습니다정규식 다른 정규식

<a href="http://www.somesite.com/" target="_blank"> 

을 그리고 인터넷에이 캐릭터 라인의 URL 부분을 식별하기 위해이 정규식을 발굴했다.

\ b (https? ftp 파일) : // [-A-Z0-9 + & @ #/%? = ~ _!, :.] * [-A-Z0-9 + & @ #/(%) = ~ _ |]

그러나,이 정규식은 포함하는 포함되지는 HTML 텍스트를 <a href="" target="_blank">를 탈출했다.

큰 문서에서 전체 문자열을 식별 할 수 있어야하며 위의 문자열의 이스케이프 처리되지 않은 HTML 부분에 대해 추가 Regex를 작성해야합니다. 위의 문자열을 찾으려면 Regex가 어떻게 보이겠습니까?

감사합니다.

+0

(HTTP [당신은 정규식 HTML을 구문 분석을 시도해서는 안] : // stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – Bohemian

답변

0

정규식은 html로는 적합하지 않습니다. 그러나 마크 업으로 사용 된 문자 참조의 이상한 사례가 있기 때문에 아마 HTML이 아닙니다.

이 펄 샘플이 작동하지 않을 수 있습니다,하지만 난 정말 모르겠어요 :

use strict; 
use warnings; 

my $samp = ' 
<a href="http://www.somesite.com/" target="_blank"> 
<a target="_blank" href="http://www.someothersite.com/" &gt; 
'; 

my $regex = qr{ 
(
(?:<|&lt;)a 
    (?=\s) (?:(?!&gt;|>)[\S\s])* 
    (?<=\s) href \s* = \s* 
     " \s* ((?:https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]) \s* " 
    (?:(?!&gt;|>)[\S\s])* (?<!/) 
(?:>|&gt;) 
) 
}x; 


while ($samp =~ /$regex/g) { 
    print "In: '$1'\nfound: '$2'\n--------\n"; 
} 

출력 :

In: '&lt;a href="http://www.somesite.com/" target="_blank"&gt;' 
found: 'http://www.somesite.com/' 
-------- 
In: '<a target="_blank" href="http://www.someothersite.com/" &gt;' 
found: 'http://www.someothersite.com/' 
--------