Chance
Themenersteller
Programmierer
Guru (173 Beiträge)

Regulärer Ausdruck; Klammernparsung

am 12.03.2014, 10:58 Uhr eröffnete Chance folgenden Thread
PHP & MySQL    6108 mal gelesen    14 Antwort(en).

Hallo,

ich hab folgendes Problem:
Mit

\{([i\$\#\~\!\+\@\?][^\{\}]+)\}

Versuche ich den Inhalt aus den ersten Klamern vom folgenden Text rauszusuchen:

{?if|{$alpha}|==|0| {@index_start} }
{?if|{$alpha}|>|0| {@index_weiter} }

was nicht funktioniert.
Ich benötige den "{?if" Anteil, es wird aber "{@index_start}" etc. rausgeworfen.


joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 12.03.2014, 13:27 Uhr schrieb joerg

Hallo

Genau habe ich zwar nicht verstanden worauf das hinauslaufen soll.
Heisst die Problemstellung wird mir aus den wenigen Zeilen nicht klar.
Besonders nicht welches Ergebnis jetzt gebraucht wird.

Aber vielleicht hilft ja dieser Vorschlag.


$test = preg_match(\'#(\\{\\?if\\|(\\{[^\\{]+)(\\{[^\\}]+)\\}\\})#\',$daten);
var_dump($daten[0]);
var_dump($daten[1]);
var_dump($daten[2]);


Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

Chance
Programmierer
Guru (173 Beiträge)
am 12.03.2014, 14:16 Uhr schrieb Chance

Leider nicht direkt.
Weil das ?if nur eine Möglichkeit von vielen ist: @$ etc...

Es geht darum, das die Klammer in der Klammer genommen wird, und nicht Klammer.


joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 12.03.2014, 14:59 Uhr schrieb joerg

Hallo

Und es muss die erste Klammer sein und nur deren Inhalt?

So ich habe mich um deine diversen Möglichkeiten jetzt nicht gekümmert,weil anhand dieser Beschreibung es für mich nicht nachvollziehbar ist welche Möglichkeiten es gibt.


$test = preg_match(\'#\\{[^\\{\\}]+\\{([^\\}]+)\\}#\',$daten);
var_dump($daten);


Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

Chance
Programmierer
Guru (173 Beiträge)
am 12.03.2014, 15:24 Uhr schrieb Chance

Ja.
Aus der Verschachtelung benötige ich nur die erste Ebene.

Das RegX ergibt folgende Ausgabe:
Array
(
[0] => Array
(
[0] => {?if|{$alpha}
[1] => {?if|{$alpha}
)
[1] => Array
(
[0] => $alpha
[1] => $alpha
)
)

Leider nicht, das was ich suche.


Die verschiedenen Möglichkeiten standen im regulären Ausdruck das ich mitgepostet hatte mit drin in der ersten Klammer.
Aber diese sind für die Lösung nicht so wichtig.


joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 12.03.2014, 15:43 Uhr schrieb joerg

Hallo

Okay dann bin ich jetzt ganz verwirrt weil das Regex das ausgibt was du beschrieben hast.

Der Inhalt der ersten Klammer ist halt eben $alpha und das bekommst du ja zurück.

Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

Chance
Programmierer
Guru (173 Beiträge)
am 12.03.2014, 18:57 Uhr schrieb Chance

Ich meine die Klammer mit dem Inhalt "?if|{$alpha}|==|0| {@index_start}"


matthes
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 12.03.2014, 19:10 Uhr schrieb matthes

Gib uns einfach mal zwei oder drei vollständige Beispiele davon, wie es aussehen kann und welches Ergebnis der reguläre Ausdruck liefern soll.


Make Seitenreport great again!

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 12.03.2014, 19:13 Uhr schrieb joerg

Hallo

Müsste dann darauf hinauslaufen.

(:?\\{)([^\\}]+\\}[^\\}]+\\})(:?\\})


Und das wäre dann wohl die Variante mit den verschiedenen Möglichkeiten.
(:?\\{)([i\\$\\#\\~\\!\\+\\@\\?][^\\}]+\\}[^\\}]+\\})(:?\\})


@matthes Du das versuche ich schon die ganze zeit das er sich klarer ausdrückt.
Danke aber dafür das du mit meiner Ansicht übereinstimmst.

Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

Chance
Programmierer
Guru (173 Beiträge)
am 13.03.2014, 08:33 Uhr schrieb Chance

Funktioniert leider überhaupt nicht.

Ich benötige sowas wie:

Array
(
[0] => Array
(
[0] => {?if|{$alpha}|==|0| {@index_start}}
[1] => {?if|{$alpha}|==|0| {@index_weiter}}
)
[1] => Array
(
[0] => ?if|{$alpha}|==|0| {@index_start}
[1] => ?if|{$alpha}|==|0| {@index_weiter}
)
)


joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 13.03.2014, 10:10 Uhr schrieb joerg

Hallo

Kann auch nicht gehen wenn man die falsche Reihenfolge nimmt um die Unterabfragen nicht einzubeziehen.


(?:\\{)([^\\}]+\\}[^\\}]+\\})(?:\\})

Bei deinem gewünschten Ergebnis sollte das aber noch ausreichen.

\\{([^\\}]+\\}[^\\}]+\\})\\}

Mit diesen Möglichkeiten wäre das dann wohl

\\{([i\\$\\#\\~\\!\\+\\@\\?][^\\}]+\\}[^\\}]+\\})\\}


Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools



« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5273 Themen und 36107 Beiträge.
Insgesamt sind 48345 Mitglieder registriert.