![]() |
Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
Code:
Da die RegEx nicht ungreedy gesetzt ist müsst sie ja per default greedy sein, also sie viele Daten mitnehmen wie geht... also prüfst du nach dem Anfang eines neuen Block oder dem Ende der Zeile...
(^\[|$)
(ungetestet) |
Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
Hallo Matthias,
versuch mal das:
Code:
Du suchst einfach alles, was keine [ ist ;)
preg_match_all("/^\[code\]([^\[]*?)/msi", $source, $codeParts);
Du hast dann aber ein Problem, wenn eine eckige Klammer im Text vorkommt ;) Greetz alcaeus |
Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
Zu einfach, :stupid:, den hatte ich schon. Wenn ich das ergänze, dann nimmt er auch Leerzeilen innerhalb der gesuchten Sektion als Ende, und das soll er ja nicht. Sorry, mein Fehler, :oops:, hätte ich erwähnen müssen.
@alca: Kann ich auch nicht machen, ;), da eben auch eckige Klammern innerhalb des Textes vorkommen können. |
Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
Code:
Dann nimm den ;) der ist nun auch getestet ;)
preg_match_all("/^\[code\](.*)(\[?)/msi", $source, $codeParts);
/Edit: aber auch nich so richtig :/ :pale: *hrrrm* |
Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
Dann bleibt dir wohl nichts anderes uebrig, als die ersten Sektionen mit deiner Regex auszulesen, und die letzte dann anhand der Position der gefundenen Sektionen im Ursprungsstring zu bestimmen.
Das $ matcht in Multiline-Expressions naemlich immer das Zeilenende, das kannst du nicht verhindern. Von daher gibt es afair keinen gesunden Weg, das Stringende zu bestimmen ;) Greetz alcaeus |
Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
\Z oder \z müsste korrekt sein, wenn ich nicht irre. Zumindest funktioniert die Idee. Ich habe noch einen Bug drin, aber der hat mit einer anderen Sache zu tun :mrgreen:.
|
Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
Klappt. Ich habe fertig. :stupid: Ich habe gerade eine Miniklasse für einen zweiteiligen Inno Setup-Highlighter geschrieben. Der nutzt GeSHi, formatiert aber Skript- und Pascalteil separat. Darum die Auftrennung der
Zitat:
Also, herzlichen Dank an alle Mitwürgenden. :mrgreen: |
Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
/Edit: zu viel probiert und nicht mitgelesen, vergesst es :/
|
Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
Wieso? Ich habe noch eine Kleinigkeit gefunden. Wenn unmittelbar hintereinander zwei [Code]-Sektionen folgen, ignoriert er die zweite. Folgen gleich drei [Code]-Sektionen aufeinander, ignoriert er die mittlere. :gruebel:
|
Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
Damit geht es
Code:
:stupid:
"/^\[code\](.*?)(^\[[^code]|\Z)/msi"
Jetzt benötige ich nur noch eine Möglichkeit, Kommentare und Prä-Prozessor-Anweisungen zu finden, die sich direkt am Dateianfang befinden. Das gehört aber mehr zu GeSHi. Die folgenden Zeilen werden bspw. so formatiert:
Code:
Dreh ich es um, würde die ISPP-Anweisung schwarz sein, und der Kommentar gefärbt werden. Füge ich am Anfang eine Leerzeile ein, dann wird beides korrekt gefärbt. Ich schätze, dass hier irgendwo das Problem liegt:
; Kommentar
[color=red]#define ISPP "bla"[/color]
Code:
2 => array(
GESHI_SEARCH => '^;.*$', GESHI_REPLACE => '\\0', GESHI_MODIFIERS => 'm', GESHI_BEFORE => '', GESHI_AFTER => '' ) btw, COMMENT_SINGLE (stellt GeSHi für Zeilenkommentare zur Verfügung) kann ich nicht nutzen. Ich habe auch nicht mehr daran gedacht, dass das Semikolon auch als Trennzeichen in den einzelnen Sektionen benutzt wird. Man hat mich daran erinnert. ;) Folglich würde alles hinter einem Semikolon als Kommentar miss-interpretiert werden.
Code:
Darum der Umweg über reguläre Ausdrücke.
[Files]
Source: "bla.exe"[color=green]; DestDir: "{app}"[/color] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz