AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
Thema durchsuchen
Ansicht
Themen-Optionen

RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT

Ein Thema von static_cast · begonnen am 1. Mai 2006 · letzter Beitrag vom 5. Mai 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT

  Alt 2. Mai 2006, 12:21
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)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#12

Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT

  Alt 2. Mai 2006, 12:25
Hallo Matthias,

versuch mal das:
Code:
preg_match_all("/^\[code\]([^\[]*?)/msi", $source, $codeParts);
Du suchst einfach alles, was keine [ ist
Du hast dann aber ein Problem, wenn eine eckige Klammer im Text vorkommt

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#13

Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT

  Alt 2. Mai 2006, 12:25
Zu einfach, , 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, , hätte ich erwähnen müssen.

@alca: Kann ich auch nicht machen, , da eben auch eckige Klammern innerhalb des Textes vorkommen können.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT

  Alt 2. Mai 2006, 12:32
Code:
preg_match_all("/^\[code\](.*)(\[?)/msi", $source, $codeParts);
Dann nimm den der ist nun auch getestet


/Edit: aber auch nich so richtig :/ *hrrrm*
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#15

Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT

  Alt 2. Mai 2006, 12:35
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#16

Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT

  Alt 2. Mai 2006, 12:36
\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 .
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#17

Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT

  Alt 2. Mai 2006, 12:43
Klappt. Ich habe fertig. 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:
Datei mit INI-ähnlichen Sektionen
Es gibt nämlich einige Schlüsselworte der anderen Sektionen (FileName, usw.), die ich persönlich auch manchmal als Variablennamen in der [Code]-Sektion nutze. Und die sollten da natürlich nicht als Schlüsselwort formatiert werden.

Also, herzlichen Dank an alle Mitwürgenden.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT

  Alt 2. Mai 2006, 12:50
/Edit: zu viel probiert und nicht mitgelesen, vergesst es :/
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#19

Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT

  Alt 2. Mai 2006, 15:57
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.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#20

Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT

  Alt 3. Mai 2006, 20:00
Damit geht es
Code:
"/^\[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:
; Kommentar
[color=red]#define ISPP "bla"[/color]
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:
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:
[Files]
Source: "bla.exe"[color=green]; DestDir: "{app}"[/color]
Darum der Umweg über reguläre Ausdrücke.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz