html mit regulärem Ausdruck zerlegen
hi,
ich will einen einfachen Html-Text in seine Einzelteile zerlegen.
Dazu soll aus
Das ist eine <b>Test</b>
ein array gemacht werden
array(
[0] = Das
[1] = ist
[2] = eine
[3] = <b>
[4] = Test
[5] = </b>
meine (fast) Lösung besteht darin ein
$pattern = '#[(<^>>)|\s]+#mU';
$token = preg_split($pattern, $html);
nur fehlen mir dann leider die spitzen Klammern um die html Tags
[0] = Das
[1] = ist
[2] = eine
[3] = b
[4] = Test
[5] = /b
wie erhalte ich den die < und > vor den tags?
thanks
stefan
Re: html mit regulärem Ausdruck zerlegen
Stefan Kilp wrote:
> Dazu soll aus
> Das ist eine <b>Test</b>
>
> ein array gemacht werden
>
> array(
> [0] = Das
> [1] = ist
> [2] = eine
> [3] = <b>
> [4] = Test
> [5] = </b>
>
> nur fehlen mir dann leider die spitzen Klammern um die html Tags
> wie erhalte ich den die < und > vor den tags?
Füge einfach vorher ein Leerzeichen an den notwendigen Stellen ein und
zerlege erst dannach.
$str = 'Ich bin ein <b>Text</b> mit html';
$str_prepared = preg_replace_callback(
'~(>)([^\s])|([^\s])(<)~',
'myCallback',
$str
);
function myCallback($m) {
if (isset($m[1]) && !empty($m[1])) return $m[1].' '.$m[2];
return $m[3].' '.$m[4];
}
print_r(preg_split('~\s+~', $str_prepared));
Das muß je nach komplexitatät des HTML noch angepaßt werden sollte aber
für das von Dir gepostete HTML ausreichen.
Merke: Zusätzliche Zwischenschritte sind nix böses :-)
MfG, Ulf
--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Re: html mit regulärem Ausdruck zerlegen
Stefan Kilp <stefan.kilp [at] gmx.net> wrote:
>Dazu soll aus
>
> Das ist eine <b>Test</b>
>
>ein array gemacht werden
>
>array(
> [0] = Das
> [1] = ist
> [2] = eine
> [3] = <b>
> [4] = Test
> [5] = </b>
$html = 'Das ist eine <b>Test</b>';
preg_match_all('/(?:<.*?>)|(?:\w+)/', $html, $token);
print_r(reset($token));
Array
(
[0] => Das
[1] => ist
[2] => eine
[3] => <b>
[4] => Test
[5] => </b>
)
schöne grüße, steffen