
[code]

     $str = 'abcdefg<span style="font-size:20px;">hijklmnop</span>qrs<span style="font-size:18px;color=F00;">tuv</span>wxyz';
    
[/code]

上記のような文字列をphpを使い以下のようにしたいと考えています。

[code]

    Array([0]=>abcdefg,[1]=><span style="font-size:20px;">hijklmnop</span>,[2]=>qrs,[3]=><span style="font-size:18px;color=F00;">tuv</span>,[4]=>wxyz)
    
[/code]

どのように解決できますでしょうか。


CC BY-SA 3.0
2016-11-11T02:09:10.017
30314
2016-11-12T04:13:34.363
2016-11-11T07:05:54.883
5519
19522
question
php html array
htmlタグをphpで配列にしたいと考えています。


phpでjqueryのようにhtmlを扱うならphpqueryというものがあります。  
<http://qiita.com/zaburo/items/465ca691aebad2b5691e>


CC BY-SA 3.0
2016-11-11T03:18:22.620
30316
2016-11-11T03:18:22.620
19445
30314
answer


ネストなど考えない簡易的なものであれば、正規表現を使う方法があります。

[code]

    $str = 'abcdefg<span style="font-size:20px;">hijklmnop</span>qrs<span style="font-size:18px;color=F00;">tuv</span>wxyz';
    preg_match_all('/(<[^>]+>[^<]+<\/[^>]+>|[^<]+)/', $str, $matches);
    print_r($matches[1]);
    
[/code]

正規表現の考え方としてですが、

  * <hoge>〜</hoge>の間を取得する
  * <までの範囲まで取得する

こうすると下記のような結果が得られます。

[code]

    Array
    (
        [0] => abcdefg
        [1] => <span style="font-size:20px;">hijklmnop</span>
        [2] => qrs
        [3] => <span style="font-size:18px;color=F00;">tuv</span>
        [4] => wxyz
    )
    
[/code]


CC BY-SA 3.0
2016-11-12T04:13:34.363
30339
2016-11-12T04:13:34.363
18542
30314
answer