3

次のような HTML があります。

    <b>This is a title: </b> 0091 + Two + 423 + Four + (Five, Six, Seven)
    <b>Some more text: </b> Abc + Hi + Random + Text + (Hello, 522, Four)
    ...
    <b>Hello world!: </b> Test + Foo + 1122 + (120, 122, Four)

を使用してphp、これを分割し、次のように 2 つの配列を作成します。

配列 1<b> - (タグにすべてが含まれます)

    [0] -> <b>This is a title: </b>
    [1] -> <b>Some more text: </b>
    ...
    [n] -> <b>Hello world!: </b>

配列 2 - (これには、タグの外側のすべてが含まれます)<b>

    [0] -> 0091 + Two + 423 + Four + (Five, Six, Seven)
    [1] -> Abc + Hi + Random + Text + (Hello, 522, Four)
    ...
    [n] -> Test + Foo + 1122 + (120, 122, Four)

正規表現を使用しようとしましpreg_match_allたが、それらを理解できないようです。どんな助けでも大歓迎です。

ありがとう!

4

2 に答える 2

1

これを試すことができます:

<pre>
<?php

$subject =<<<LOD
<b>This is a title: </b> 0091 + Two + 423 + Four + (Five, Six, Seven)
<b>Some more text: </b> Abc + Hi + Random + Text + (Hello, 522, Four)
<b>Hello world!: </b> Test + Foo + 1122 + (120, 122, Four)
LOD;

$pattern = '~(<b>.*?</b>)((?>[^<]+|<(?!b))*)~';
preg_match_all($pattern, $subject, $matches);

array_shift($matches);
array_walk_recursive($matches,function (&$val){ $val=trim($val); });
list($array1, $array2) = $matches;

print_r($array1);
print_r($array2);
于 2013-07-15T22:40:24.763 に答える
1
<?php 
$string = '    <b>This is a title: </b> 0091 + Two + 423 + Four + (Five, Six, Seven)
    <b>Some more text: </b> Abc + Hi + Random + Text + (Hello, 522, Four)
    ...
    <b>Hello world!: </b> Test + Foo + 1122 + (120, 122, Four)';
preg_match_all("#(<b>[^<]+<\/b>)([^<]+)#", $string, $matches);
print_r($matches);
?> 

出力:

Array
(
    [0] => Array
        (
            [0] => <b>This is a title: </b> 0091 + Two + 423 + Four + (Five, Six, Seven)

            [1] => <b>Some more text: </b> Abc + Hi + Random + Text + (Hello, 522, Four)
    ...

            [2] => <b>Hello world!: </b> Test + Foo + 1122 + (120, 122, Four)
        )

    [1] => Array
        (
            [0] => <b>This is a title: </b>
            [1] => <b>Some more text: </b>
            [2] => <b>Hello world!: </b>
        )

    [2] => Array
        (
            [0] =>  0091 + Two + 423 + Four + (Five, Six, Seven)

            [1] =>  Abc + Hi + Random + Text + (Hello, 522, Four)
    ...

            [2] =>  Test + Foo + 1122 + (120, 122, Four)
        )

)
于 2013-07-15T22:33:47.360 に答える