regex data splitten

Status
Niet open voor verdere reacties.

kenikavanbis

Terugkerende gebruiker
Lid geworden
22 mei 2007
Berichten
2.123
de aanroep van de splitter
PHP:
$string = "qmksjdfmks <h3> tekst van H3 </h3> <div>  <ul> tekst van p1 </ul> <p> tekst van p2 </p> <p> tekst van p3 </p> qmksjdfmks <h3> tekst van H23 </h3>  <p> tekst van p21 </p> <p> tekst van p22 </p> <p> tekst van p23 </p>";
print_r(datasplit($string));

nu wat is het probleem dat als er op <div> te veel tags en tekst komt de regex niet werkt dit op de plaats in regex "(?x)". maar wat het wel zou moeten worden om alle chars die er tussen zitten toe te laten is de vraag
PHP:
    //public 
    function datasplit(&$source){
        $x = preg_replace(array('#</p>#'),"</p> \n",$source);//upgrade finder  (.*!(<p>|<ul>))
        $x = preg_replace(array('#</ul>#'),"</ul> \n",$x);//upgrade finder  (.*!(<p>|<ul>))
        $regx = "#(<h\d>(?<name>.*)</h\d>.+)?".
                "(?x)".
                //"(([A-Za-z0-9\.\-\_\!\#\$\%\&\'\*\+\/\=\?\^\`\{\|\}]+))".
                "((<p>|<ul>)(?<content>.*)(</p>|</ul>).*)#i";
        //$regx = "#(<h\d>(?<name>.*)</h\d>.+)((<p>|<ul>)(?<content>.*)(</p>|</ul>))?#";
        //$regx = "#(<h\d>(?<name>.*)</h\d>.+)?(<ul>(?<content>.*)</ul>)#";
        preg_match_all($regx,$x,$result,PREG_PATTERN_ORDER);
        $rest = array();
        $name="";
        if(isset($result['name'])&& $result['name']!="" && isset($result['content'])){//
            foreach($result['name']as $key=>$named){
                print "<br>key".$key." val".$named." ";
                if($named!="" && $result['content'][$key]!=""){
                    $name = $named;
                    $rest[$name]= array();
                }
                if($name != ""){
                   array_push($rest[$name],$result['content'][$key]); 
                }
            }
        }else{
            print_r($result);
        }
        return $rest;
    }
 
Laatst bewerkt:
Als er altijd een <div xxxx > staat kun je isschien gewoon alles tussen < en > weglaten?

Wat is de uitzondering hier? (ik begrijp het probleem niet helemaal vanuit je uitleg)
 
Als er altijd een <div xxxx > staat kun je isschien gewoon alles tussen < en > weglaten?

Wat is de uitzondering hier? (ik begrijp het probleem niet helemaal vanuit je uitleg)

regel 4 is gewijzigd naar
$x = preg_replace(array('#</ul>#'),"</ul> \n",$x);//upgrade finder (.*!(<p>|<ul>))

dus
"qmksjdfmks <h3> tekst van H3 </h3> <div> <ul> tekst van p1 </ul> <p> tekst van p2 </p> <p> tekst van p3 </p> qmksjdfmks <h3> tekst van H23 </h3> <p> tekst van p21 </p> <p> tekst van p22 </p> <p> tekst van p23 </p>";
dit is de bedoeling van uitkomst
Array (
[ tekst van H3 ] => Array ( [0] => tekst van p1 [1] => tekst van p2 [2] => tekst van p3 )
[ tekst van H23 ] => Array ( [0] => tekst van p21 [1] => tekst van p22 [2] => tekst van p23 )
)

ik ben een test aan het laten lopen uitgebreide uitkomst volgt als er een fout uit komt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan