reguläre Ausdrücke

Hallo Community,
vielleicht gibt es hier jemanden, der mehr Anhnung von regulären Ausdrücken hat als ich.
Mein Problem ist das Erfassen und Zerlegen eines XPATH Querys in seine Bestandteile oder Elemente, welche ich für eine weitere Verarbeitung auswerten muss.

$string = '/element1/element2/element3/element4[number(@attribute1) > 1 and not(/element1/element2/element3/element5)]';

Ziel sollte es hier sein ein Array zu bekommen welche wie folgt aussehen soll...

1.element1
2.element2
3.element3
4.element4[number(@attribute1) > 1 and not(/element1/element2/element3/element5)]

Ganz ehrlich gesagt habe ich nicht ansatzweise eine Idee hier ein Lösung zu erarbeiten, da meine Schwierigkeit das letzte Element4 mit seinen Bedingungen ist...

Hat jemand eine Hilfestellung für mich, bzw einen Ansatz ?

Danke ...
 
Spontan, eine Schleife die alles zwischen zwei Slashes ins Array schiebt, es sei den es kommt eine eckige Klammer vor dem Slash.

Gruß
 
Danke,
momentan habe ich es bis auf diese Ebene hinbekommen...

$hit = preg_match_all( '/((\w*)|\[.*\]||\(.*\))/i', $string, $result );
 
Wenn ich das Problem richtig verstehe (Elemente haben jeweils beliebige alphanumerische Bezeichnungen, können noch optional Eigenschaften in eckigen Klammern haben, die allerdings als Teil des Elements gewertet und nicht separat gespeichert werden sollen), versuch es mal damit:
Code:
\/\w+(\[[^]]+\])?
Das nimmt dir noch das führende Slash mit rein, möglicherweise hast du allerdings Optionen wie das \zs in Vim, um das direkt im regulären Ausdruck zu lösen oder du gehst anschließend nochmal drüber und bereinigst die Einträge.
 
Viele lieben Dank, der hilft mir bei meinem bestehenden Query sehr gut weiter ...
Im Endeffekt sieht er jetzt so aus und liefert scheinbar alles so, wie ich es benötige... Ein paar Testabläufe stehen noch an.

Code:
'/(\/\/|\/|\*|\||\.|\.\.|\@)\w+(\[[^]]+\])?|\[.*\]|\(.*\)/i'

Konstellation wie */ oder ./ oder ../ oder @ habe ich mit berücksichtigt

Danke nochmal
 
@Chromatin
klingt zwar spannend und ist mir auch bekannt, jedoch für mich nicht notwendig, bzw. nicht das was ich brauche.

Ich habe ein bestehendes Schema (*.xsd) welches ja bekanntlich und auch typischer Weise als Grundlage für die Erstellung eines XML Dokumentes dient.

In einem separaten Dokument sind nun Einschränkungen via XPath Expression definiert (>500), welche das bestehende Schema einschränken sollen. Also es soll nicht das bestehende Schema (Basis) um weiter DOMNode's oder DOMAttr's usw erweitern, sondern lediglich die Regularien der bestehenden Basis einschränken - z.B. das Pattern zu dem Attribute XYZ (Basis) lauetet regex="(a-zA-Z){1,10}" und die Einschränkung hierzu würde dann sagen regeex="(a-z){1,5}".

Die Basis würde somit weiterhin korrekt, und auch nach dem ursprünglichen Basis-Schema valide bleiben, auch wenn die Einschränkungen berücksichtigt und integriert wurden.

Mein Ziel ist es die Einschränkungen, welche zur Zeit via XPath-Query in einer XML-Datei zum Ausdruck kommen, Softwareseitig zu erfassen, ausfzulösen und das bestehende Basisschema automatisiert anzupassen, so dass die Einschränkungen eingearbeitet werden. Das Ergebnis soll dann ein Schema sein, das alle Vorgaben (Basis + Einschränkungen) beinhaltet.
 
Zurück
Oben