PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (PHP) - RegEx Hilfe Twig Templates nach Sprach Strings scannen



darkness
20.05.2015, 13:11
Hallo,

i brauche von jemanden der sich damit auskennt Hilfe bei einer RegEx.

Ich muss Twig Files nach "Sprach Strings" scanne. Das funktioniert ganz gut bis jetzt mit meinem alten Scanner.

Beispiel: {{ 'Ich bin ein kurzer Text'|translate }}

Jetzt muss ich das aber erweitern und "Optionen" parsen können sprich {{ 'Ich bin ein kurzer Text'|translate }} muss funktionieren {{ 'Mein Name ist :name'|translate({":name":"Spongebob Schwammköpfle"}) }} sprich ich brauche als Result Mein Name ist :name & {":name":"Spongebob Schwammköpfle"} Wäre schön wenn die Regex beide Fälle abdecken würde.

Die Hilfe ausm Raidrush Board hat mir leider wenig geholfen also {{ '(.*)'(\|translate|\|translate\((.*)\))? }} bringt überhaupt keine Ergebnisse.

Danke schonmal

Cappa
20.05.2015, 18:33
Kannst du deine Beispiele in code blöcken formatieren?

Das würde es allen sehr vereinfachen.

Unlimiter
20.05.2015, 18:52
Eigentlich sollte es reichen aus


{{ '(.*)'(\|translate|\|translate\((.*)\))? }}

das zu machen:


\{\{ '(.*)'(\|translate|\|translate\((.*)\))? }}

Immerhin sind unter anderem { Special-Characters in Regex.

darkness
20.05.2015, 19:15
Muss gehen.

{{ 'Mein Name ist :name'|translate({":name":"Spongebob Schwammköpfle"}) }}

Geht

{{ 'Ich bin ein kurzer Text'|translate }}

Rule


preg_match_all("{{\s'(.*)'(\|translate|\|translate\((.*)\))?\s}}")

y0l0sw4gg3r
20.05.2015, 20:09
Ich steig mit ein:


{{\s'(.*)'\|translate(\((.*)\))?\s}}

Klappts?

darkness
20.05.2015, 20:34
Ich gucke gleich! :) Danke schonmal

xTear
25.05.2015, 10:17
Ich gucke gleich! :) Danke schonmal

Andere möglichkeit: Das Ganze mit str_replace o.Ä. machen :P

Ah okay, dachte du kennst die Sprachvariablen, aber du sammelst sie.

Sorry (noch zu wenig kaffee intus ~.~)

Unlimiter
09.06.2015, 06:30
{{\s'(.*)'\|translate(\((.*)\))?\s}}


Den Ausdruck könnte an noch etwas spezifizieren (übrigens ja, es funktioniert auf die Texteingabe) :).


{{ '(.+)'\|translate(\(\{(.+)\}\))? }}

In dem Fall wären jetzt nicht mehr alle Whitespace-Chars nutzbar, sondern tatsächlich nur das Leerzeichen, am Anfang und Ende. Außerdem wäre es eventuell besser die Treffer nicht auf .* laufen zulassen, immerhin könnte die Menge ja leer sein. Eventuell ist das gar nicht gewünscht. Man könnte sich also überlegen daraus ein .+ zu machen, damit wenigstens irgend ein Zeichen darin stehen soll. Ansonsten wäre dann nur noch, dass man die geschwungenen Klammern im translate-Teil auch noch hinzufügt. Dann wäre das eine zwar kein strikter Ausdruck, aber schon spezifizierter.