2 Stimmen

Wie kann man Pseudocode ähnlich wie BBCode in PHP parsen?

Ich arbeite mit Vorlagendateien, die Zeilen wie diese enthalten:

[field name="main_div" type='smallblock' required="yes"]
[field type='bigblock' color="red" name="inner_div"]
[field name="btn" type='button' caption='Submit']

gemischt mit HTML-Zeilen.

Es handelt sich um Pseudocode für die Generierung von HTML-Code gemäß Attributwerten.

Ich habe eine begrenzte Anzahl von Attributen, kontrolliere jedoch nicht deren Reihenfolge im String und deren Vorhandensein. Manchmal ist das "required"-Attribut gesetzt, manchmal fehlt es zum Beispiel.

Was ist der einfachste und bequemste Weg, um solche Zeichenketten zu analysieren, damit ich mit Attributen als assoziativem Array arbeiten kann?

Regulärer Ausdruck, endlicher Zustandsautomat, Teilzeichenfolge von [ bis ], aufteilen nach Leerzeichen und aufteilen nach Gleichheitszeichen?

Ich suche nach Ratschlägen oder einem einfachen Codeausschnitt, der mit dem bereitgestellten Beispiel funktioniert.

3voto

mario Punkte 141130

Reguläre Ausdrücken. Während Sie einen Parser für Schemata wie dieses erstellen könnten, ist dies übertrieben und bietet keine Widerstandsfähigkeit gegen fehlerhafte Token.

Der Trick besteht darin, zwei reguläre Ausdrücke zu verwenden, einen zum Auffinden der [field]-Token und einen zweiten zum Aufteilen der Attribute.

preg_replace_callback('/\[(\w+)(\s+\w+=\pP[^"\']*\pP)*\]/', "block", $);

function block($match) {

    $field = $match[1];

    preg_match_all('/(\w+)=\pP([^"\']+)\pP/', $match[2], $attr);
    $attr = array_combine($attr[1], $attr[2]);

    // ...
    return $html;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X