2011-02-09 5 views
0

저는 현재 HTML을 가져와 일반 텍스트로 변환하는 펄 스크립트를 가지고 있습니다. 나는 모든 HTML 태그를 제거하기 위해 HTML :: TagFilter를 사용하고 있으며, 우리가 하나의 문제에 부딪친 것을 제외하고는 거의 완벽하게 작동하고있다. 있는 HTML이 예를 입력에서 "캡션"와 같은 비 스탠드 HTML 태그가 포함 된 경우 해당 태그가 제거되지 않는 아래 : 나는 도움이 필요 무엇Perl 정규식 텍스트 입력 처리

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam pulvinar, odio ut gravida fringilla, tellus mi ultrices felis, quis porta lacus sem ut lacus. Vestibulum massa justo, tristique id aliquet in, dapibus eu leo. Nam sapien risus, dictum et porttitor quis, egestas quis dui. Ut nec nisl felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. 

[caption id="sample-id" align="sample-align" width="225" caption="Sample Caption"]<a href="http://www.domain.com/image.jpg"><img class="sample-image-class" title="Sample Title" src="http://www.domain.com/image.jpg" alt="Sample Alt" width="225" height="300" /></a>[/caption] 

In hac habitasse platea dictumst. Duis imperdiet bibendum dolor ut ullamcorper. Suspendisse dui erat, facilisis sed aliquet non, elementum eu urna. Donec non nisi vel augue gravida imperdiet sed id tortor. Maecenas ullamcorper velit non dui imperdiet hendrerit. 

완전히이 콘텐츠를 제거하는 간단한 펄 정규식 . 여러 접근법을 시도했지만 아무 것도 작동하지 않는 것 같습니다.

$text =~ s/[(\w)+](.*)[\/(\w)+]//g; 

내가 바라고 더 나은 사람에 대한 간단한 운동은 다음과 같습니다 찾아 대괄호 []를 사용하여 비표준 HTML 태그의 모든 항목을 제거 할 다음과 같은 일이 내가 무엇을 찾고 있어요입니다 나는 정규 표현식에서.

미리 도움 주셔서 감사합니다.

+0

나는'HTML :: TagFilter'을 모르는, 그래서 이것은 정직한 질문,하지만 당신은 단지'$자가> deny_tags()'에'caption'을 추가 할 수 있습니까? – CanSpice

+0

@CanSpice - deny_tags()가 <> not []를 사용하는 표준 HTML 형식의 태그 만 지원하기 때문에 불행히도 작동하지 않습니다. –

+0

오, 알았어요. 실제로 HTML이 아니며, HTML과 비슷한 형태로 나타나는 마크 업 태그이지만 <> 대신 []을 사용합니다. – CanSpice

답변

2

대괄호는 정규식 내에서 특별한 의미가 있기 때문에 이스케이프 처리해야합니다. 모든 속성이 큰 따옴표로 묶여 있고, 다음과 같이 동작해야한다고 가정합니다.

$text =~ s/\[\/?\w+(\s+\w+="[^"]*")*\s*\/?\s*\]//g; 
+0

제안 해 주셔서 감사합니다.하지만 불행히도 위의 샘플 입력에서 작동하지 않는 것 같습니다. 왜 그것이 작동하지 않는지 아는가? –

+0

@Russell C .: 죄송합니다. 내 버그. 나는 내가 [^ "] *를 의미하는 [^"*]을 썼다. 이것도 자기/닫는 "태그"를 제거하지 않습니다. – btilly

+0

감사합니다. 완벽하게 일했습니다. –

0

당신은 다른 사람을 제거하기 위해 대괄호와 신뢰 HTML :: TagFilter에서의 것만을 제거하는 정규식을 사용할 수 있습니다.

$text =~ s! #Start match pattern (used exclamation mark instead of/for readability) 
     \[ #Left square bracket 
      [^\]]*? #Followed by any character(s) which are not ]. ? means lazy match 
     \] #Right square bracket 
     !!gx; #Replace with nothing, globally, allow comments and whitespace