Сопоставление базового HTML с помощью регулярных выражений (или любым другим способом)
У меня есть такой 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
, я хочу разделить это и сделать два массива следующим образом:
массив 1 - (это будет иметь все в тегах <b>
)
[0] -> <b>This is a title: </b>
[1] -> <b>Some more text: </b>
...
[n] -> <b>Hello world!: </b>
Array 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
, но я просто не могу понять их. Любая помощь будет высоко оценена.
Спасибо!
2 ответа:
<?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) ) )
Вы можете попробовать это:
<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);