Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo zusammen,

ich habe einen String, der z.b. so aufgebaut ist:


$string = "<p>ARTICLE[id=4 format=html]</p>HEADER[id=1 format=html transform=upper]<div><p>ARTICLE[id=4 format=csv]</p></div><br><p>ARTICLE[id=5]</p>";
[/PHP]

Wie kann ich nun dort mit RegEx drauf losgehen, damit ich folgendes Array erhalte:

[PHP]
$articles = array(
array( 'id' => 4, 'format' => 'html'),
array( 'id' => 4, 'format' => 'csv'),
array( 'id' => 5),
);

$header = array(
array( 'id' => 1, 'format' => 'html', 'transform' => 'upper');
);

Ich selbst bin schon auf folgenen Ansatz gekommen, aber ich vermute, dass das doch bestimmt mit 1-2 RegEx schneller geht. Da ich Texte hab, die sehr lang sein können (Mysql longtext) und dort entsprechend sehr oft auch eine dieser "Variablen" vorkommen kann.

Mein Ansatz:


$art_vars = array();

preg_match_all('/ARTICLE[.*]/imsU',$content,$matches = array());
foreach ( $matches as $_match) {
$art_params = array();
$_params = explode( " ", $_match);
foreach ( $_params as $_param) {
$arg = explode( "=", $_param);
$arg_name = $arg[0];
$arg_value = str_replace( array( '"', '\''), '', $arg[1]);
$art_params[$arg_name] = $arg_value;
}
$art_vars[] = $art_params;
}
// weitere Verarbeitung
[/PHP]

Wie gesagt, vermute ich, dass man das doch sicher "schöner" und schneller mit einem oder zwei regex hinbekommt, oder?

Danke für eure Mühe,

Markus

  • 2 Jahre später...
Geschrieben

Hab nach Regex CSV und PHP gesucht bin hier gelandet, falls ihr auch mal ein CSV Parsen wollt :

<?

// CSV Notation (Access style): "var1";"var2";"var3";"var4"end_of_line

// Delimiter= ;

// " Quoten mit "

//

// var1 = Ne40";"35_3 // extra ";" dazwischen zu testzwecken

// var2 = german

// var3 = "Black" // extra "

// var4 = 0

$zeichenkette_csv_style = '"Ne40"";""35_3";"german";"""Black""";"0"'."\r\n";

$suchmuster = '/"([^"]{1,}|["]{2}){1,}"/';

preg_match_all($suchmuster, $zeichenkette_csv_style, $treffer);

$resultate = $treffer[0];

//Sauber geschnittene Felder ausgeben

print 'Orginal-Zeichenkette : '.$zeichenkette_csv_style.'<br>';

foreach($resultate as $key => $value){

$var = substr($value,1,-1); //Felder sind mit " eingeschlossen

$var = str_replace('""','"',$var); //Gequotete " entfernen

print $var.'<br>';

}

?>

Geschrieben
Wie gesagt, vermute ich, dass man das doch sicher "schöner" und schneller mit einem oder zwei regex hinbekommt, oder?

Ich hab mich mal dran versucht und würd's so machen:


<?php
$string = "<p>ARTICLE[id=4 format=html]</p>HEADER[id=1 format=html transform=upper]<div><p>ARTICLE[id=4 format=csv]</p></div><br><p>ARTICLE[id=5]</p>";


$arrRes = array();

if (preg_match_all('/([\w]+)\[([^\]]+)\]/s', $string, $arrPregRes) > 0) {
foreach ($arrPregRes[1] as $key=>$val) {
if (!array_key_exists($val, $arrRes)) {
$arrRes[$val] = array();
}
if (preg_match_all('/([^\s=]+)=([^\s]+)/s',$arrPregRes[2][$key], $arrInnerPregRes) > 0) {
$arrTmp = array();
foreach ($arrInnerPregRes[1] as $iKey=>$iVal) {
$arrTmp[$iVal] = $arrInnerPregRes[2][$iKey];
}
$arrRes[$val][] = $arrTmp;
}
}
}

echo "<pre>";
print_r($arrRes);
echo "</pre>";
?>
[/PHP]

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...