Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT (https://www.delphipraxis.net/68548-regex-%3D-regex-php-ereg-liefert-immer-nur-reg_badrpt.html)

cruiser 5. Mai 2006 06:29

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

Zitat von MathiasSimmack
Damit geht es
Code:
"/^\[code\](.*?)(^\[[^code]|\Z)/msi"

puh, sicher?
Code:
(^\[[^code]|\Z)
heisst doch umschrieben:
(       beginne match
^       Zeilenanfang
\[      Zeichen: Eckige Klammer auf
[^code] keines der Zeichen c, o, d oder e (einzelnes Zeichen)
|       oder
\Z     end of subject oder Zeilenumbruch am Ende
)      beende match
das [^code] kann dir glaube zum Verhängnis werden


Was den Single-Line-Comment angeht...

[Edit #1: hier stand mal wieder Shredder, den ich vorsichtshalber entfernt hab]

Da kommt sich irgendwo irgend etwas in die Quere bei Geshi.
Ohne alles liefert:

Code:
<pre>
<?php
$source1 ='; Kommentar
#define ISPP "bla"';
$source2 ='#define ISPP "bla"
; Kommentar';

$GESHI_SEARCH = '^;.*$';
$GESHI_REPLACE = '\\0';
$GESHI_MODIFIERS = 'm';

$source1 = preg_replace("#$GESHI_SEARCH#$GESHI_MODIFIERS", "<span style='color:#f00;'>$GESHI_REPLACE</span>", $source1);
$source2 = preg_replace("#$GESHI_SEARCH#$GESHI_MODIFIERS", "<span style='color:#f00;'>$GESHI_REPLACE</span>", $source2);
echo $source1."\n\n".$source2;

?>
</pre>
Das hier:
Code:
[color=#ff0000]; Kommentar[/color]
#define ISPP "bla"

#define ISPP "bla"
[color=#ff0000]; Kommentar[/color]
[Edit #2: Ich hab noch mal dran gebastelt]

Code:
<pre>
<?php
$source1 ='; Kommentar
#define ISPP "bla"';
$source2 ='#define ISPP "bla"
; Kommentar';

$GESHI_SEARCH[] = '@^;.*$@m';
$GESHI_SEARCH[] = '@^#.*$@m';
$GESHI_REPLACE[] = "<span style='color:#090;'>\\0</span>";
$GESHI_REPLACE[] = "<span style='color:#f00;'>\\0</span>";

$source1 = preg_replace($GESHI_SEARCH, $GESHI_REPLACE, $source1);
$source2 = preg_replace($GESHI_SEARCH, $GESHI_REPLACE, $source2);
echo $source1."\n\n".$source2;

?>
</pre>
erzeugt folgendes:
Code:
[color=#009900]; Kommentar[/color]
[color=#ff0000]#define ISPP "bla"

#define ISPP "bla"[/color]
[color=#009900]; Kommentar[/color]
Wenn du also die Compiler-Statements, die am Anfang stehn IRGENDWIE overriden kannst dann leg eine ähnliche regex wie bei den singleline-omments an

Überzeugen darfst du dich hier: http://www.cruiser-dev.de/matsim.php

MathiasSimmack 5. Mai 2006 15:16

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

Zitat von cruiser
puh, sicher?

Richtige Frage an den Falschen. :lol: Nein, bin ich nicht, da ich mich nicht wirklich mit diesen regulären Ausdrücken auskenne. Ich habe es bisher so gedeutet: Finde alles nach einer [Code]-Sektion, bis zum Dateiende, bzw. bis zu einer neuen Sektion mit eckiger Klammer am Zeilenanfang, die nicht [Code] heißt. Das Ergebnis war witzigerweise exakt so formatiert wie im Inno Setup-Editor selbst:
[code=pre][Code]

{ ... jede Menge Pascal-artiger Code ... }

[Code]

// noch mehr davon

[Files]
...

Code:
...
Deswegen dachte ich, dass ich per Zufall die Lösung gefunden hätte. :gruebel:


Zu den Kommentaren kann ich bisher nichts sagen, weil du deine PHP-Lösung selbst per "preg_replace" geschrieben hast. Problem: Ich benutze GeSHi. Darum die Array-Definition, die so an den Highlighter gegeben wird, der dann im Text nach passenden Matches sucht. Deswegen diese Namen wie GESHI_REPLACE, usw.

Na ja, wenn ich nicht vorwärts komme, dann suche ich mir einen anderen Highlighter. Irgendwo habe ich noch den Beautifer liegen. :lol:

cruiser 5. Mai 2006 15:33

Re: RegEx != RegEx? PHP ereg liefert immer nur REG_BADRPT
 
Bin mal nich so und übersetz es in dieses Array-Format (womit sicher auch nur preg_replace gefüttert wird):

Code:
2 => array(
   GESHI_SEARCH => '^;.*$',
   GESHI_REPLACE => '\\0',
   GESHI_MODIFIERS => 'm',
   GESHI_BEFORE => '<span style="color:#090;">',
   GESHI_AFTER => '</span>'
)

3 => array(
   GESHI_SEARCH => '^#.*$',
   GESHI_REPLACE => '\\0',
   GESHI_MODIFIERS => 'm',
   GESHI_BEFORE => '<span style="color:#f00;">',
   GESHI_AFTER => '</span>'
)
So müsst es GeSHi genau so formatieren, wie ich im Beispiel, gesetz dem Fall, dass dieses BEFORE / AFTER für Formatierungen ist ;)

[Edit: noch mal zum nicht code ;) ]

ersetz mal dieses:
Code:
"/^\[code\](.*?)(^\[[^code]|\Z)/msi"
durch dieses:
Code:
"/^\[code\](.*?)([\r\n]+\[(?!code)\]|\Z)/msi"
Du musst nur aufpassen dass du dir nur Match #1 also \\1 holst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr.
Seite 3 von 3     123   

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