1

元のコード:

<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);

誰でもこの問題を解決するのを手伝ってくれますか? ありがとうございました!!

4

2 に答える 2

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'
于 2012-04-15T17:29:54.920 に答える
0

現時点では PHP を利用できないので、Javascript で正規表現を書きます。簡単に移植できます。(RegExp オブジェクトを使用するので、正規表現は既に引用されています)

'<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>

したがって、考えられるほとんどの状況を考慮した正規表現の 1 つです。

これはあなたの質問に答えていますか?

(ちなみに、これらの [ \t\r\n] は、php の正規表現がサポートしていて、複数行モードで動作する場合は空白の短縮形に置き換えることができます)

于 2012-04-15T16:22:33.900 に答える