Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   [TPerlRegEx] Binary Replace (https://www.delphipraxis.net/153249-%5Btperlregex%5D-binary-replace.html)

Win32.API 26. Jul 2010 17:48

[TPerlRegEx] Binary Replace
 
Hallo,

ist es möglich mit TPerlRegEx binäre Daten zu ersetzen? Konkret sollte das etwa so aussehen.
Delphi-Quellcode:
    with TPerlRegEx.Create(nil) do
    try
      Subject := BINAERE_DATEN;
      RegEx := '\x01\x02';
      Replacement := '\x03\x04';
      Replace();
    finally
      Free;
    end;
Es soll
Delphi-Quellcode:
#01#02
durch
Delphi-Quellcode:
#03#04
ersetzen, leider wird
Delphi-Quellcode:
#01#02
durch
Delphi-Quellcode:
'\x03\x04'
ersetzt.

Grüße,
Win32.API

//Edit: War mir ganz unsicher, in welches Forum ich das Posten soll. Vielleicht ist es in "Sonstige Fragen zu Delphi" besser aufgehoben.

himitsu 26. Jul 2010 18:07

AW: [TPerlRegEx] Binary Replace
 
Delphi-Quellcode:
RegEx := '\x01\x02';
Replacement := #3#4;
Die Expression muß schon den RegExp-Regeln entsprechen, aber im Replacement muß der gewünschte Text direkt drinstehn, da dort natürlich nicht die Expression-Regeln gelten.

Win32.API 26. Jul 2010 19:28

AW: [TPerlRegEx] Binary Replace
 
Ah, ok, danke Dir für die Antwort. Gibt es eine Möglichkeit das Replacement auch in RegEx-Syntax anzugeben? Um einen Einheitlichen Standard zu schaffen?

himitsu 26. Jul 2010 19:55

AW: [TPerlRegEx] Binary Replace
 
mit Boardmitteln ... nein

du müßtest dir also selber einen Converter schreiben,
wobei man hierbei notfalls auch wieder 'nen RegEx-Replace nutzen könnte.

Deine Lib bietet doch eine Möglichkeit über 'ne Callbackfunktion den Repleace durchzuführen?
z.B. für diese "Chars" nach
Delphi-Quellcode:
'\\x\x{1,2}'
suchen, in dem Callback den Hex-Anteil in ein Char übersetzen.

Aber danke für den Tipp (schreibe ja nebenbei noch eine "fast fertige" RegEx-Lib) und da könnte ich soeinen Converter leicht mit integrieren :)
(bin aber aktuell noch mit was Anderem beschäftigt und erst danach kann ich mich wieder darum kümmern :cry: )

Win32.API 27. Jul 2010 08:33

AW: [TPerlRegEx] Binary Replace
 
Zitat:

Zitat von himitsu (Beitrag 1037739)
Deine Lib bietet doch eine Möglichkeit über 'ne Callbackfunktion den Repleace durchzuführen?
z.B. für diese "Chars" nach
Delphi-Quellcode:
'\\x\x{1,2}'
suchen, in dem Callback den Hex-Anteil in ein Char übersetzen.

Danke für die Antwort, aber sollte die Expression nicht eher so aussehen:
Delphi-Quellcode:
\\x([0-9a-fA-F]{1,2})
, wobei man an dieser Stelle noch auf das Escapen aufpassen müsste.

Grüße,
Win32.API

himitsu 27. Jul 2010 08:43

AW: [TPerlRegEx] Binary Replace
 
ups, jetzt hab'sch mich tatsächlich verlaufen :wall:

OK, dann halt
XML-Code:
\p{IsXDigit}
(nach Perl) sowie
XML-Code:
[[:xdigit:]]
(nach POSIX) oder eben
XML-Code:
[0-9A-Fa-f]
.

k.A. ob's so auch noch läuft
XML-Code:
'(?=(\\\\|[^\\]\\\\|[^\\]|^))\\x[0-9A-Fa-f]{1,2}'
. oder vielleicht einfach nur
XML-Code:
'(?!\\)\\x[0-9A-Fa-f]{1,2}'
alle Escapesequenzen davor auszuwerten, via 'ner RegExp, ist nun och nicht so einfach/möglich.

Win32.API 27. Jul 2010 09:47

AW: [TPerlRegEx] Binary Replace
 
Habe nochmal ein wenig in den Perl-Docks gestöbert: \x gibt's nicht dafür aber \X, welches genau das macht. :thumb:

Und das escapen sollte doch mit einer einfachen negative look behind expression ala
Delphi-Quellcode:
(?<!\\)\\x\X{1,2}
funktionieren.

Grüße,
Win32.API

himitsu 27. Jul 2010 09:56

AW: [TPerlRegEx] Binary Replace
 
hab'sch mich also doch nicht total falsch verlaufen :stupid:
Zitat:

Zitat von Win32.API (Beitrag 1037814)
Und das escapen sollte doch mit einer einfachen negative look behind expression ala
Delphi-Quellcode:
(?<!\\)\\x\X{1,2}
funktionieren.

Delphi-Quellcode:
'abc\x12' .. 'a b c \x12'
geht
Delphi-Quellcode:
'abc\\x12' .. 'a b c \\ x 1 2'
geht
Delphi-Quellcode:
'abc\\\x12' .. 'a b c \\ \x12'
geht nicht :stupid:
Delphi-Quellcode:
'abc\\\\x12' .. 'a b c \\ \\ x 1 2'
geht
also oftmals könnte es funktionieren ... muß es aber nicht

Win32.API 27. Jul 2010 10:12

AW: [TPerlRegEx] Binary Replace
 
Zitat:

Zitat von himitsu (Beitrag 1037818)
Delphi-Quellcode:
'abc\x12' .. 'a b c \x12'
geht
Delphi-Quellcode:
'abc\\x12' .. 'a b c \\ x 1 2'
geht
Delphi-Quellcode:
'abc\\\x12' .. 'a b c \\ \x12'
geht nicht :stupid:
Delphi-Quellcode:
'abc\\\\x12' .. 'a b c \\ \\ x 1 2'
geht
also oftmals könnte es funktionieren ... muß es aber nicht

Ist doch schon mal ein Anfang :stupid:

Ich glaube es wird auch schwer, dass mit einer RegEx Expression zu lösen.

Wenn dann müsste jeder Slash escapt werden. Also wird '\\' zu '\' und '\' zu ''.

himitsu 27. Jul 2010 10:31

AW: [TPerlRegEx] Binary Replace
 
eventuell so
wenn keine ungerade Anzahl an \ davor liegt, dann umwandeln :gruebel:
XML-Code:
'(?!([^\\]|^)\\(\\\\)*)\\x[0-9A-Fa-f]{1,2}'


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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