2012-04-15 3 views
1

원래 코드 :정규식을 사용하여 HTML에서 속성 (스타일 속성 제외)을 제거하려면 어떻게해야합니까?

<div style="height:100px;" id="main" > 
<a href="133"></a> 
<blockquote color="123"> 

<div style="height:100px;" > 
<a></a> 
<blockquote> 

내가 정규식을 시도하지만

preg_replace('#<(div|span|a|img|ul|li|blockquote).*(style=".*")?(.*)>#Us', '<$1$2>', $content); 

누구도 날이 문제를 해결하는 데 도움이 될 수 있습니다 그 작동하지 대체? 고맙습니다!!

+0

은''태그 내부에' "'의 마지막 모습에'"= 스타일 '에서 만날 것입니다. – hjpotter92

+0

예. 그것의 얼굴. 메신저는 이미 그것을 피하기 위해 사용합니다. 그것은 무엇이어야 하는가? – user1334715

+0

잘 모르겠지만 php-regex에'. +'일치가 있습니까? – hjpotter92

답변

1

정규식을 추천하지 않습니다, 그러나 이것은 아마 작동합니다.

편집 : 고정 옵션 그룹이 잘못되었습니다. 여기

테스트 케이스 : (". *"스타일 =) http://ideone.com/vRk1u

'~ 
(< (?:div|span|a|img|ul|li|blockquote) (?=\s))   # 1 
    (?= 
    (?: 
     (?:[^>"\']|"[^"]*"|\'[^\']*\')*? 
     (              # 2 
      \s style \s*= 
      (?: (?> \s* ([\'"]) \s* (?:(?!\g{-1}) .)* \s* \g{-1}) #3 
      | (?> (?!\s*[\'"]) \s* [^\s>]* (?=\s|>)) 
     ) 
     ) 
    )? 
    ) 
    \s* (?:".*?"|\'.*?\'|[^>]*?)+ 
(/?>)             # 4 
~xs' 
0

현재 PHP를 사용할 수 없으므로 자바 스크립트로 정규식을 작성하고 쉽게 이식 할 수 있습니다. 계정 최대한 상황을 고려합니다

'<div style="height:100px;" id="main" >'.replace(new RegExp('<([a-zA-Z0-9]*)(.*([ \t\r\n]style[ \t\r\n]*=[ \t\r\n]*(("[^"]*")|(\'[^\']*\'))))*[^>]*>'), '<$1$3>') 
== <div style="height:100px;"> 

'<div style=\'height:100px;\' id="main" >'.replace(new RegExp('<([a-zA-Z0-9]*)(.*([ \t\r\n]style[ \t\r\n]*=[ \t\r\n]*(("[^"]*")|(\'[^\']*\'))))*[^>]*>'), '<$1$3>') 
== <div style='height:100px;'> 

'<div style="height:100px;">'.replace(new RegExp('<([a-zA-Z0-9]*)(.*([ \t\r\n]style[ \t\r\n]*=[ \t\r\n]*(("[^"]*")|(\'[^\']*\'))))*[^>]*>'), '<$1$3>') 
== <div style="height:100px;"> 

'<div dfg dfg fdg>'.replace(new RegExp('<([a-zA-Z0-9]*)(.*([ \t\r\n]style[ \t\r\n]*=[ \t\r\n]*(("[^"]*")|(\'[^\']*\'))))*[^>]*>'), '<$1$3>') 
== <div> 

'<div>'.replace(new RegExp('<([a-zA-Z0-9]*)(.*([ \t\r\n]style[ \t\r\n]*=[ \t\r\n]*(("[^"]*")|(\'[^\']*\'))))*[^>]*>'), '<$1$3>') 
== <div> 

그래서 그 하나 개의 정규 표현식 (정규식은 이미 당신을 위해 인용한다, 그래서 나는 정규 표현식 객체를 사용합니다).

귀하의 질문에 대한 답변이 있습니까?

(PHP의 정규식을 지원하고 여러 모드에서 작동하는 경우, BTW 당신은 ​​공백 속기있는 사람 [\ t \ 연구 \ n]을 대체 할 수있다)

관련 문제