Zum Inhalt springen
ThreadPHP & MySQL

Regulärer Ausdruck; Klammernparsung

Kategorie
PHP & MySQL
Gelesen
6108
Antworten
14
Erstellt von: gelöschter BenutzerDatum: 12.03.2014, 10:58 Uhr
Archiv-KommentarArchiviert, nicht priorisiertCMS & technische Umsetzung

Redaktionelle Einordnung

Diese archivierte Diskussion behandelt Regulärer Ausdruck; Klammernparsung aus Sicht der Rubrik PHP & MySQL.

CMS- und Technikfragen sind heute besonders dann relevant, wenn sie Indexierung, Rendering, interne Verlinkung oder Relaunch-Risiken beeinflussen.

Sinnvoll nutzbar bleibt der Thread vor allem als historischer Kontext, für typische Fragestellungen und zur Einordnung älterer Empfehlungen.

Startbeitrag

Originaler Foreninhalt in modernisierter Darstellung.

Zur Kategorie
gelöschter Benutzer
Threadstart · PHP & MySQL 6108 mal gelesen · 12.03.2014, 10:58 Uhr

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.

Antworten

10 Beiträge
gelöschter Benutzer
am 12.03.2014, 13:27 Uhr schrieb
Antwort

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

gelöschter Benutzer
am 12.03.2014, 14:16 Uhr schrieb
Antwort

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.

gelöschter Benutzer
am 12.03.2014, 14:59 Uhr schrieb
Antwort

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

gelöschter Benutzer
am 12.03.2014, 15:24 Uhr schrieb
Antwort

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.

gelöschter Benutzer
am 12.03.2014, 15:43 Uhr schrieb
Antwort

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

gelöschter Benutzer
am 12.03.2014, 18:57 Uhr schrieb
Antwort

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

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

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!
gelöschter Benutzer
am 12.03.2014, 19:13 Uhr schrieb
Antwort

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

gelöschter Benutzer
am 13.03.2014, 08:33 Uhr schrieb
Antwort

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}
)
)

gelöschter Benutzer
am 13.03.2014, 10:10 Uhr schrieb
Antwort

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