Chance
Mitglied seit: 13.11.2009

Themenersteller
Programmierer
Guru (173 Beiträge)

Regulärer Ausdruck; Klammernparsung

12.03.2014, 10:58 Uhr    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
Mitglied seit: 09.06.2009

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

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
Mitglied seit: 13.11.2009

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

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
Mitglied seit: 09.06.2009

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

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
Mitglied seit: 13.11.2009

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

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
Mitglied seit: 09.06.2009

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

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
Mitglied seit: 13.11.2009

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

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


matthes
Mitglied seit: 08.05.2010

Foren Moderator
Evil Genius
Content Halbgott (967 Beiträge)
12.03.2014, 19:10 Uhr

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
Mitglied seit: 09.06.2009

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

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
Mitglied seit: 13.11.2009

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

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
Mitglied seit: 09.06.2009

Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
13.03.2014, 10:10 Uhr

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


Neuen Beitrag erstellen

Um einen Beitrag zu erstellen, müssen Sie eingeloggt sein. Bitte melden Sie sich an.
EinloggenRegistrieren



« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 4134 Themen und 36063 Beiträge.
Insgesamt sind 47922 Mitglieder registriert.