2011-01-12 9 views
2

Ich versuche, eine Zeichenfolge-Manipulation für diese Zeichenfolge durchzuführen. Ich habe einen Algorithmus im Hinterkopf, bin mir aber nicht sicher über die PHP-Syntax.Wie kann ich diese Zeichenfolge kopieren, während Sie diese Änderungen vornehmen

<who not="p" what="v" /> 
<cares i="n" want="m" /> 
<target my="t" what="iwant" /> 

Zwischen jedem Start- und Zielpaar < und />, die Zeichenfolge my="t" kann oder nicht (in diesem Beispiel nur in der dritten Zeile besteht) vorliegen. Wenn es nicht existiert, möchte ich das ganze < /> wie es ist kopieren. Wenn es existiert, möchte ich <something /> danach hinzufügen. Also habe ich diese Zeichenfolge will so aussehen

<who not="p" what="v" /> 
<cares i="n" want="m" /> 
<target my="t" what="iwant" /><something /> 

Was die Situation kompliziert ist, dass my="t" scheinen keine Standardposition haben, könnte es irgendwo zwischen < /> sein. Irgendwelche Vorschläge, wie man das mit PHP macht? Ich denke regex

+0

Da es, wie Sie mit XML arbeiten sieht, warum nicht einen XML-Parser wie [SimpleXML] (http : //php.net/manual/de/book.simplexml.php)? – Kevin

Antwort

1

Zuerst denke ich, Sie regex verwenden könnte, oder einfach Kombination von substr & strpos die <... />

Sie können strstr trennen verwenden, um festzustellen, ob my="t" in einem String erscheint oder nicht, führen Sie dann die geeignete Maßnahme.

Eigentlich denke ich, dass das Aufteilen Ihrer Aufgabe in kleinere Aufgaben einfacher und leichter zu umgestalten ist, als zu versuchen, alles in einem Schuss mit einer magischen Regex zu bekommen.

+0

+1 aber ich denke, deine Antwort fehlt ein Stück. Wie unterteile ich die Zeichenfolge in mehrere '< />'? – park

+0

Schleife durch die Zeichenfolge, finden Sie zuerst die strpos "/>", dann verwenden Sie substr, um es ausschneiden. –

+0

@park: Sie können sich meinen schnellen Code hier anschauen: http://codepad.org/Dyk0VhKz. Sie müssen noch eine While-Schleife einfügen, um mehrmals die Position "/>" zu bestimmen. –

1

Haben Sie einen Versuch mit:

$l = array('<who not="p" what="v" />','<cares i="n" want="m" />','<target my="t" what="iwant" />'); 

foreach ($l as $str) { 
    $str = preg_replace('#(<.*?my="t".*? />)#', "$1<something />", $str); 
    echo $str,"\n"; 
} 

Ausgang:

<who not="p" what="v" /> 
<cares i="n" want="m" /> 
<target my="t" what="iwant" /><something /> 
Verwandte Themen